缩放画布后位图质量丢失

时间:2013-01-10 07:29:44

标签: java android bitmap

我想绘制一个在画布中缩放的Bitmap(基于Bitmap和View大小)。问题是如果我在绘制位图之前缩放画布:

 canvas.scale(1.5f,1.5f);
 canvas.drawBitmap(mBitmap, 0, 0, paint);

结果如下:

aliased image

但是如果不是缩放画布而是缩放位图:

Bitmap scaled = Bitmap.createScaledBitmap(
        mBitmap, bitmapWidth, bitmapHeight,
        true);
canvas.drawBitmap(scaledBitmap, 0, 0, paint);

结果好多了: Correctly scaled image

问题是Bitmap非常大并且在内存中原始位图和缩放位图都可能存在问题。

每次Bitmap或View边界发生变化时,有没有办法获得第二个结果而不创建缩放的Bitmap?

3 个答案:

答案 0 :(得分:1)

在绘制到画布时使用包含缩放信息的矩阵

canvas.drawBitmap(x,y,..., matrix...)

答案 1 :(得分:1)

从源代码中读取位图时,在inSampleSize中使用BitmapOptions进行相应缩放(将其作为额外参数传递)。

这是几乎在所有情况下加载图像的首选方法,以避免内存溢出,因为完整图像从未加载到内存中。

Loading BItmaps efficiently can be found here.

上的Android文档

使用示例代码介绍如何从源中检索所需大小的图像。 (资源,文件等)

Loading Large Bitmaps Efficiently中的两种方法是您正在寻找的方法。

答案 2 :(得分:1)

我的问题的解决方案是Paint没有启用FILTER_BITMAP_FLAG标志。