我想绘制一个在画布中缩放的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?
答案 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标志。