我从blob类型获取字节数组,而存储在db中,它适用于小图像但是当图像大小超过200kb时,它会给我一个错误的错误。 我该怎么做才能克服这种错误
照片是我的字节数组
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)
答案 0 :(得分:2)
图像尺寸无关紧要。宽度和高度都很重要。实际上,您的Bitmap实例将保留width*height*4
个字节。如果您收到OOM
,我建议您对Bitmap
进行缩减采样。
另外
Bitmap theImage= BitmapFactory.decodeStream(imageStream);
Bitmap bitmapScaled = Bitmap.createScaledBitmap(theImage, 100,80, true);
在您创建的代码段中,在创建bitmapScaled
之后,从未使用过的图像。你应该回收它来调用
theImage.recycle().
编辑。此代码段将创建比原始
宽1/4的位图 BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream, null, options );