Android加载大位图

Gia*_*mmy 8 android canvas bitmap

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

要加载我使用的图像:

BitmapFactory.decodeResource (ctx.getResources (), R.drawable.image)
Run Code Online (Sandbox Code Playgroud)

绘制它:

imgCanvas.drawBitmap (image, posX, posY, null), 
Run Code Online (Sandbox Code Playgroud)

要改变它的大小:

Bitmap.createScaledBitmap (originalBitmap, neww, NEWH, true);
Run Code Online (Sandbox Code Playgroud)

Str*_*ton 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。