package im.actor.sdk.util.images.ops;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import im.actor.sdk.util.images.common.WorkCache;
/**
* Created by ex3ndr on 20.09.14.
*/
public final class ImageRotating {
public static Bitmap fixExif(Bitmap src, int rotationTag) {
if (rotationTag <= 1 || rotationTag > 8) {
return src;
}
int nw;
int nh;
switch (rotationTag) {
default:
case 1:
case 2:
case 3:
case 4:
nw = src.getWidth();
nh = src.getHeight();
break;
case 5:
case 6:
case 7:
case 8:
nw = src.getHeight();
nh = src.getWidth();
break;
}
Bitmap res = Bitmap.createBitmap(nw, nh, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(res);
Paint paint = WorkCache.PAINT.get();
paint.setAntiAlias(false);
paint.setFilterBitmap(false);
Matrix matrix = new Matrix();
switch (rotationTag) {
case 2:
matrix.setScale(-1, 1, src.getWidth() / 2, src.getHeight() / 2);
break;
case 3:
matrix.setRotate(180, src.getWidth() / 2, src.getHeight() / 2);
break;
case 4:
matrix.setScale(1, -1, src.getWidth() / 2, src.getHeight() / 2);
break;
case 5:
matrix.postRotate(90);
matrix.postTranslate(src.getHeight(), 0);
matrix.postScale(-1, 1, src.getHeight() / 2, src.getWidth() / 2);
break;
case 6:
matrix.postRotate(90);
matrix.postTranslate(src.getHeight(), 0);
break;
case 7:
matrix.postRotate(-90);
matrix.postTranslate(0, src.getWidth());
matrix.postScale(-1, 1, src.getHeight() / 2, src.getWidth() / 2);
break;
case 8:
matrix.postRotate(-90);
matrix.postTranslate(0, src.getWidth());
break;
}
canvas.drawBitmap(src, matrix, paint);
canvas.setBitmap(null);
src.recycle();
return res;
}
private ImageRotating() {
}
}