Android 在画布上绘制平滑缩放的位图
这就是我在Android应用程序中在画布上绘制位图的方式:Android 在画布上绘制平滑缩放的位图,android,android-canvas,antialiasing,Android,Android Canvas,Antialiasing,这就是我在Android应用程序中在画布上绘制位图的方式: canvas.save(); canvas.scale(scale, scale, x, y); canvas.drawBitmap(bitmap, x, y, null); canvas.restore(); 但是,位图缩放不平滑,不执行抗锯齿。如何启用抗锯齿?您是否尝试过创建一个Paint对象,调用它并将其作为第四个参数传递给drawBitmap方法?如果这不起作用,我想您应该缩小drawBitmap调用,而不是缩放画布,例如使用
canvas.save();
canvas.scale(scale, scale, x, y);
canvas.drawBitmap(bitmap, x, y, null);
canvas.restore();
但是,
位图
缩放不平滑,不执行抗锯齿。如何启用抗锯齿?您是否尝试过创建一个Paint
对象,调用它并将其作为第四个参数传递给drawBitmap
方法?如果这不起作用,我想您应该缩小drawBitmap
调用,而不是缩放画布,例如使用。尝试以下方法:
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawBitmap(bitmap, x, y, paint);
这两个
Paint-Paint=新绘制(绘制.过滤器\u位图\u标志)代码>或绘制.setFilterBitmap(真)
对我很有用,但要小心,在我的游戏中,它只将FPS从30FPS
降低到17FPS
。因此,如果它是一个任务关键型绘图,如在游戏中,你最好在加载时缩放图像。我是这样做的:
public Bitmap getImage (int id, int width, int height) {
Bitmap bmp = BitmapFactory.decodeResource( getResources(), id );
Bitmap img = Bitmap.createScaledBitmap( bmp, width, height, true );
bmp.recycle();
return img;
}
您只需要一行代码:
canvas.drawBitmap(bitmap, x, y, new Paint(Paint.ANTI_ALIAS_FLAG));
不是5行谢谢,它起作用了,我只是使用了Paint-Paint=new-Paint(Paint.FILTER\u-BITMAP\u-FLAG)代码>我对此没有任何乐趣。你是放大还是缩小你的图像?我只是想插话说,除了setAntiAlias(真)之外,再加上setFilterBitmap(真)和SetDitter(真)会对磨损设备产生很大的影响。效果很好!谢谢只是一张纸条。如果你想要一个简单的平方结果,无论你需要放大还是缩小,使用这个非常方便的技巧。。。stackoverflow.com/a/17733530/294884希望它能帮助一些人。请不要只是添加代码,还要提供一些解释。@Rohan:问题是:“在画布上绘制平滑缩放的位图”,然后你可以使用例如Canvas.drawBitmap(源代码,0,0,new Paint(Paint.ANTI_别名_标志));为了这个。你现在明白了吗?@Rohan:另一边:我为什么要在这里提供冗余代码?请先阅读其他答案。你误解了我。我只是想让你补充一点解释,它会帮助很多新手,比如——使用Paint.ANTI_ALIAS_FLAG
FLAG,该标志用于去除锯齿状边缘并平滑边缘。像这样的。(然后你也添加代码)如果你不理解这个代码,你必须训练。但这并不是说downvotecreateScaledBitmap是唯一能为我产生平滑边缘的解决方案。非常感谢。