Android加载大位图

时间:2013-03-10 14:52:24

标签: android canvas bitmap

我正在制作Android应用,我需要在卡瓦斯中加载图像(位图)并使用“捏缩放”手势调整大小。但是,当图像超过一定大小时,应用程序崩溃(OutOfMemory异常)。如何优化图像的加载和操作?

要加载我使用的图像:

BitmapFactory.decodeResource (ctx.getResources (), R.drawable.image)

绘制它:

imgCanvas.drawBitmap (image, posX, posY, null), 

要改变其大小:

Bitmap.createScaledBitmap (originalBitmap, neww, NEWH, true);

1 个答案:

答案 0 :(得分:4)

这不是一件容易的事。

根据图像的当前比例和图像的当前可见部分,仅以适当的分辨率加载该图像的一部分:
https://developer.android.com/reference/android/graphics/BitmapRegionDecoder.html

缩小时,如果要显示缩小的整个图像,请使用此BitmapRegionDecoder类中带有BitmapFactory.Options参数的方法并将其设置为inSampleSize更大的值超过1(最好是2的幂):
https://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize

放大时,首先放大已经显示的较低分辨率(使用inSampleSize的值> 1)并懒惰地加载更高分辨率的版本(其中inSampleSize小于之前的值你使用BitmapRegionDecoder逐渐淡出更高分辨率的版本。

当用户放大时,请继续执行此操作,直到inSampleSize为1。