Android加载大型位图

Android加载大型位图,android,canvas,bitmap,Android,Canvas,Bitmap,我正在制作一个Android应用程序,我需要在cavas中加载一个图像(位图),并使用“收缩缩放”手势调整其大小。但是,当图像超过一定大小时,应用程序崩溃(OutOfMemory异常)。如何优化图像的加载和操作 要加载我使用的图像,请执行以下操作: BitmapFactory.decodeResource (ctx.getResources (), R.drawable.image) 要绘制它: imgCanvas.drawBitmap (image, posX, posY, null),

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

要加载我使用的图像,请执行以下操作:

BitmapFactory.decodeResource (ctx.getResources (), R.drawable.image)
要绘制它:

imgCanvas.drawBitmap (image, posX, posY, null), 
要更改其大小,请执行以下操作:

Bitmap.createScaledBitmap (originalBitmap, neww, NEWH, true);
这不是小事

根据图像的当前比例和图像的当前可见部分,仅以适当的分辨率加载该图像的一部分:

缩小后,要显示缩小后的整个图像,请使用此
BitMapRegionCoder
类中的方法,该方法采用
BitmapFactory.Options
参数,并将其
inSampleSize
设置为大于1的值(最好是2的幂):

放大时,首先放大已显示的较低分辨率(使用的值为inSampleSize>1),然后使用
BitMapRegionCoder
缓慢加载较高分辨率版本(其中
inSampleSize
小于先前使用的值),并逐渐淡入较高分辨率版本


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

I最初以原始大小加载图像(inSampleSize=1)。当我进行“放大”时,我必须使用大于1的值更改inSampleSize,然后裁剪图像?在用户放大之前,请使用inSampleSize>1加载整个图像。然后,当用户在某些点放大时,您将再次加载图像,但仅加载图像的一部分,并使用具有较低值(但仍大于1)的inSampleSize。当用户在某个点反复放大时,inSampleSize=1(您将只加载可见的零件)。