Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在画布上绘制平滑缩放的位图_Android_Android Canvas_Antialiasing - Fatal编程技术网

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调用,而不是缩放画布,例如使用

这就是我在Android应用程序中在画布上绘制位图的方式:

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是唯一能为我产生平滑边缘的解决方案。非常感谢。