最近在研究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();
matrix.postScale(1, -1);
matrix.postTranslate(0 ,bitmap.getHeight());
canvas.drawBitmap(bitmap, matrix, null); } }
|
上面是继承ImageView重写了onDraw方法,主要是通过matrix的postScale实现,postScale为缩放,当sy为-1时向上翻转 当sx为-1时向左翻转, sx、sy都为-1时相当于旋转180°。如下图所示:
相信通过图片大家很好理解。
通过图片大家知道当垂直翻转的时候其实图片已经跑到上面去了,要让图片正常显示得讲图片进行平移,向下平移一个图片的高度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(); matrix.postScale(1, -1); matrix.postTranslate(0, bitmap.getHeight()); canvas.drawBitmap(bitmap, matrix, null); return output; }
|
效果如下:
记录一下,也希望对大家有所帮助。有什么问题或者不对的地方欢迎大家指教!