2013-05-06 28 views
0

我从blob类型中提取字节数组,同时存储在数据库中,它适用于小图像,但当图像大小超过200kb时,它会给我一个outofmemoryerror的错误。 我应该怎么做来克服这些错误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) 
+1

有对谷歌提供了很多意见和那么,你搜索到的所有/ – Siddharth 2013-05-06 10:51:25

回答

2

图像大小并不重要。最重要的是宽度和高度。事实上,您的位图实例将保留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); 
+0

-blackbelt OK,你可以请建议我一个例子。 – hemant 2013-05-06 10:38:11

+0

例子是什么?降低位图? – Blackbelt 2013-05-06 10:38:56

+1

我是新来的这个我不明白术语Downsamplig ..我所需要的是如何克服outofMemory这个错误,并为此错误的原因 – hemant 2013-05-06 10:41:24