Android中使用Matrix实现图片的翻转

最近在研究pdf阅读的时候遇到了解析出图片出现翻转的情况于是研究了下,发现可以使用matrix实现图片的翻转。

不多说先直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Override
protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if(drawable != null){
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
Matrix matrix = new Matrix();

//缩放 当sy为-1时向上翻转 当sx为-1时向左翻转 sx、sy都为-1时相当于旋转180°
matrix.postScale(1, -1);

//因为向上翻转了所以y要向下平移一个bitmap的高度
matrix.postTranslate(0 ,bitmap.getHeight());

canvas.drawBitmap(bitmap, matrix, null);
}
}

上面是继承ImageView重写了onDraw方法,主要是通过matrix的postScale实现,postScale为缩放,当sy为-1时向上翻转 当sx为-1时向左翻转, sx、sy都为-1时相当于旋转180°。如下图所示:

scale

相信通过图片大家很好理解。

通过图片大家知道当垂直翻转的时候其实图片已经跑到上面去了,要让图片正常显示得讲图片进行平移,向下平移一个图片的高度matrix.postTranslate(0 ,bitmap.getHeight())然后图片就可以正常显示了。

如果是水平翻转同样的道理,matrix.postScale(-1, 1);然后x方向平移matrix.postTranslate(bitmap.getWidth() ,0);

如果想要得到翻转的bitmap如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
public Bitmap getTurnOverBitmap(Bitmap bitmap) {
Canvas canvas = new Canvas();
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);
canvas.setBitmap(output);
Matrix matrix = new Matrix();
// 缩放 当sy为-1时向上翻转 当sx为-1时向左翻转 sx、sy都为-1时相当于旋转180°
matrix.postScale(1, -1);
// 因为向上翻转了所以y要向下平移一个bitmap的高度
matrix.postTranslate(0, bitmap.getHeight());
canvas.drawBitmap(bitmap, matrix, null);
return output;
}

效果如下:

xiaoguo

记录一下,也希望对大家有所帮助。有什么问题或者不对的地方欢迎大家指教!

坚持原创技术分享,您的支持将鼓励我继续创作!