4

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

 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);

结果要好得多: 正确缩放的图像

问题是位图非常大,并且在内存中同时保存原始位图和缩放位图可能会有问题。

每次位图或视图边界发生变化时,有没有什么方法可以在不创建缩放位图的情况下获得第二个结果?

4

3 回答 3

1

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

canvas.drawBitmap(x,y,..., matrix...)
于 2013-01-10T07:41:33.540 回答
1

从源中读取位图时使用inSampleSizeinBitmapOptions以相应地对其进行缩放(它作为额外参数传递)。

这是 android 在几乎所有情况下加载图像以避免内存溢出的首选方式,因为完整的图像永远不会加载到内存中。

可以在此处找到有关有效加载位图的 android 文档。

使用示例代码说明如何从您的源中检索所需大小的图像。(资源、文件等)

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

于 2013-01-10T07:45:00.050 回答
1

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

于 2013-01-10T09:37:26.310 回答