如何在Android中使用bicubic插值在画布上绘制和缩放位图?

17 android drawing resize bitmap bicubic

我想在尺寸大于它的画布上绘制位图.我可以使用canvas.drawBitmap(bitmap,null,destRect,null); 但是如果源图像比目标矩形小得多,则结果是像素化的,质量很差.

如何使用双线性或双三次重采样绘制我的位图?

任何帮助将不胜感激,thanx.

Bri*_*ian 35

您需要在绘画中设置FILTER_BITMAP_FLAG标志.

canvas.drawBitmap(bitmap, matrix, null); //ugly jaggies unless scale is 1:1, but fast
Run Code Online (Sandbox Code Playgroud)

要么

Paint paint = new Paint();
paint.setFilterBitmap();
canvas.drawBitmap(bitmap, matrix, paint); // pretty but slower (not too slow, usually)
Run Code Online (Sandbox Code Playgroud)

这同样适用于该drawBitmap方法的其他(语法糖)形式.

大多数Android绘图选项都没有任何文档,也没有提供渲染的底层本机Skia库的文档.如果有的话,我会更开心.您可以在Google代码搜索中搜索Skia源代码.搜索Skia并挖掘原始资源; 这是唯一的文件.

  • 现在不得不处理这个问题,感谢指出setFilterBitmap!只是为了从我的发现中添加更多信息,滤波器位图标志false的插值是最近邻居,而true是双线性的.希望bicubic可用,但看起来不像. (4认同)