Java 缩放画布后位图质量丢失

Java 缩放画布后位图质量丢失,java,android,bitmap,Java,Android,Bitmap,我想画一个在画布上缩放的位图(基于位图和视图大小)。问题是,如果在绘制位图之前缩放画布: canvas.scale(1.5f,1.5f); canvas.drawBitmap(mBitmap, 0, 0, paint); Bitmap scaled = Bitmap.createScaledBitmap( mBitmap, bitmapWidth, bitmapHeight, true); canvas.drawBitmap(scaledBitmap, 0,

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

 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);
结果是:

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

 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);
结果要好得多:

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


是否有任何方法可以在每次位图或视图边界更改时不创建缩放位图而获得第二个结果?

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

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

从源代码读取位图时,请使用
BitmapOptions
中的
inSampleSize
,以相应地缩放位图(它作为额外参数传递)

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

安卓系统的文档

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


中有效加载大位图的两种方法是您正在寻找的方法。

我的问题的解决方案是绘画没有启用过滤器位图标志

您是否已为
Paint
对象设置了
FILTER\u BITMAP\u标志
ANTI\u ALIAS\u标志
。谢谢