[英]Bitmap quality lost after scaling canvas
我想绘制一个在画布中缩放的Bitmap(基于Bitmap和View大小)。 问题是如果我在绘制位图之前缩放画布:
canvas.scale(1.5f,1.5f);
canvas.drawBitmap(mBitmap, 0, 0, paint);
这是结果:
但是如果不是缩放画布而是缩放位图:
Bitmap scaled = Bitmap.createScaledBitmap(
mBitmap, bitmapWidth, bitmapHeight,
true);
canvas.drawBitmap(scaledBitmap, 0, 0, paint);
结果好多了:
问题是Bitmap非常大并且在内存中原始位图和缩放位图都可能存在问题。
有没有办法获得第二个结果而不是每次Bitmap或View边界发生变化时都创建缩放的Bitmap?
绘制到画布时,请使用包含缩放信息的矩阵
canvas.drawBitmap(x,y,..., matrix...)
在从源中读取位图时,在BitmapOptions
使用inSampleSize
以相应地BitmapOptions
进行缩放(它作为额外参数传递)。
这是机器人在几乎所有情况下加载图像的首选方式,以避免内存溢出,因为完整图像从未加载到内存中。
有效加载BItmaps的android文档可以在这里找到。
有关如何从源中检索所需大小的图像的示例代码。 (资源,文件等)
Loading Large Bitmaps Efficiently
的两种方法是您正在寻找的方法。
我的问题的解决方案是Paint没有启用FILTER_BITMAP_FLAG标志。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.