繁体   English   中英

缩放画布后位图质量丢失

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM