最近在做Flow Em时 遇到图片拉伸后出现严重锯齿的情况,后来网上查了下,经过几次尝试算是解决了问题,现在就来总结下:
网上搜到的两种解决方法:
1.给Paint加上抗锯齿标志。然后将Paint对象作为参数传给canvas的绘制方法。
paint.setAntiAlias(true);
canvas.drawBitmap(bmp ,fX,fY,paint);
2.直接给canvas加抗锯齿。
canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));
这两种方法 大多数情况下都能解决问题,但是部分情况下效果不太理想。除此之外还可以尝试下面两种方法:
3. 创建bitmap时就做拉伸处理:
Bitmap bmp = Bitmap.createScaledBitmap(bmpSrc, (int) (bmpSrc.getWidth() * scale), (int) (bmpSrc.getHeight() * scale), true);
注意这个 方法的最后一个参数一定要设为true,否则无法去锯齿
4 .在绘制图像时利用matrix对图像进行拉伸。
Matrix matrix = new Matrix();
matrix.setTranslate(fX,fY);
matrix.postScale(scale,scale,fX,fY);
canvas.drawBitmap(bmp,matrix,null);