我想在比实际尺寸更大的画布上绘制位图。我可以使用 canvas.drawBitmap(bitmap, null, destRect, null); 但是如果源图像明显小于目标矩形,则质量会很差,因为结果是像素化的。
如何使用双线性或双三次重采样绘制位图?
任何帮助将不胜感激,thanx。
您需要在您的绘画中设置 FILTER_BITMAP_FLAG 标志。
canvas.drawBitmap(bitmap, matrix, null); //ugly jaggies unless scale is 1:1, but fast
或者
Paint paint = new Paint();
paint.setFilterBitmap();
canvas.drawBitmap(bitmap, matrix, paint); // pretty but slower (not too slow, usually)
这同样适用于该方法的其他(语法糖)形式drawBitmap
。
大多数 Android 绘图选项都没有任何文档,也没有用于渲染的底层原生 Skia 库的文档。如果有的话我会更开心。您可以在 Google Code Search 上搜索 Skia 源代码。搜索 Skia 并挖掘原始来源;这是唯一的文档。
在大多数情况下,FILTER_BITMAP_FLAG 不适用于缩减。
良好的缩小算法(不是最近邻)仅包含 2 个步骤(加上计算输入/输出图像裁剪的精确 Rect):
以下是 SonyMobile 如何解决此任务的详细说明:https ://web.archive.org/web/20140228024414/http://developer.sonymobile.com/2011/06/27/how-to-scale-images-for-你的安卓应用程序/
这是 SonyMobile scale utils 的源代码:https ://web.archive.org/web/20140227233706/http://developer.sonymobile.com/downloads/code-example-module/image-scaling-code-example-安卓/