0

我正在从 blob 类型中获取字节数组,同时存储在 db 中,它适用于小图像,但是当图像大小超过 200kb 时,它会给我一个 outofmemoryerror 错误。我应该怎么做才能克服这样的错误

照片是我的字节数组

ByteArrayInputStream imageStream = new ByteArrayInputStream(photo);
            Bitmap theImage= BitmapFactory.decodeStream(imageStream);
            Bitmap bitmapScaled = Bitmap.createScaledBitmap(theImage, 100,80, true);
            Drawable drawable = new BitmapDrawable(bitmapScaled);
            imgPath.setBackgroundDrawable(drawable);
            imgPath.setScaleType(ImageView.ScaleType.FIT_END);

Logcat 错误

05-06 15:55:38.871: E/AndroidRuntime(2647): FATAL EXCEPTION: main
05-06 15:55:38.871: E/AndroidRuntime(2647): java.lang.OutOfMemoryError
05-06 15:55:38.871: E/AndroidRuntime(2647):     at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
05-06 15:55:38.871: E/AndroidRuntime(2647):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493)
05-06 15:55:38.871: E/AndroidRuntime(2647):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:549)
05-06 15:55:38.871: E/AndroidRuntime(2647):     at com.example.hotelmenu.RevisedMainMenu.displayMenu(RevisedMainMenu.java:655)
05-06 15:55:38.871: E/AndroidRuntime(2647):     at com.example.hotelmenu.RevisedMainMenu.onClick(RevisedMainMenu.java:615)
4

1 回答 1

2

图像大小无关紧要。重要的是宽度和高度。事实上,您的 Bitmap 实例将保留width*height*4字节。如果你得到OOM我会建议你对你的Bitmap .

 Bitmap theImage= BitmapFactory.decodeStream(imageStream);
 Bitmap bitmapScaled = Bitmap.createScaledBitmap(theImage, 100,80, true);

在您提供的片段中,在bitmapScaled创建之后,theImage 从未使用过。你应该回收它调用

theImage.recycle().

编辑。此片段将创建一个比原始图像宽 1/4 的位图

 BitmapFactory.Options options=new BitmapFactory.Options();
 options.inSampleSize = 4;
 Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream, null, options );
于 2013-05-06T10:35:10.687 回答