图片旋转以及质量问题

这里的旋转不讨论图片在imageView中的旋转问题,只是单纯的涉及一个图片bitmap的旋转 或者在一个自定义View中的旋转,虽然旋转很容易实现,但是旋转多次之后图片的质量却是个问题,有时候的效果是不看入目的,虽然对于我的项目基本上多次旋转还算比较符合原图但是 质量却是有点变,还没有发现毫无变化的,在不同的情况下使用不同的方法也会产生不同的效果,至于原因我也不是很明白,这里呢可以讨论一下:

旋转主要两种方式:

Matrix mt = new Matrix(); 
mt.postRotate(degree); 
Bitmap bitmap = CreateBitmap(src, 0, 0, w, h, mt, true); 
canvs.drawBitmap(bitmap, 0, 0, paint); 

2

canvas.save(); 
canvas.rotate(degree); 
canvas.drawBitmap(bitmap, 0, 0, paint); 
canvas.restore(); 这里的canvas是ondraw里面的

在这两种方法上可以相互揉搓 产生另外一种新的方法也就是canvas本身自己实例话,但是不是在ondraw里使用。如;

Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight, config); Canvas canvas = new Canvas(targetBitmap); Matrix matrix = new Matrix(); matrix.setRotate(mRotation,source.getWidth()/2,source.getHeight()/2); canvas.drawBitmap(source, matrix, new Paint()); 
Matrix matrix = new Matrix();
he和
matrix.setRotate(mRotation,source.getWidth()/2,source.getHeight()/2); RectF rectF = new RectF(0, 0, source.getWidth(), source.getHeight()); matrix.mapRect(rectF); Bitmap targetBitmap = Bitmap.createBitmap(rectF.width(), rectF.height(), config); Canvas canvas = new Canvas(targetBitmap); canvas.drawBitmap(source, matrix, new Paint());

这两种方法都有一个paint 可以消除锯齿的属性,但是有时效果不理想Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);

不过在旋转的时候一定要注意旋转的中心点 一般饶图片中心旋转效果比饶左上角要好

preRotate(turnDegrees, width/2, height/2);

Matrix transform = new Matrix();     transform.setTranslate(xOfCentre, yOfCentre);     transform.preRotate(turnDegrees, width/2, height/2);     canvas.drawBitmap(bitmap, transform, null);

这些方法需要自己在不同的场合去摸索,想保存图片质量出了考虑上述元素外,还应该考虑你得bitmap的出处,如bitmap。compress方法,已经option 当中几个属性的设计,这些因素综合上 自己在实际中进行调试是可以达到理想效果的。如果有更好的方式还请留言

你可能感兴趣的:(图片)