2011-12-07 116 views
2

我有一个应用程序,我需要将它们从相机中取出后将其保存到SD卡中。android中的java.lang.OutOfMemoryError保存从相机拍摄的照片

下面是代码:

camera.takePicture(myShutterCallback, myPictureCallback_RAW, 
         myPictureCallback_JPG); 

PictureCallback myPictureCallback_JPG = new PictureCallback() { 

     @Override 
     public void onPictureTaken(byte[] arg0, Camera arg1) { 

      Bitmap bitmapPicture = BitmapFactory.decodeByteArray(arg0, 0, 
        arg0.length); 

      FileOutputStream outStream = null; 
      try { 
       outStream = new FileOutputStream(UploadedFilename); 
      } catch (FileNotFoundException e2) { 
       // TODO Auto-generated catch block 
       e2.printStackTrace(); 
      } 

      final Bitmap result = Bitmap.createScaledBitmap(bitmapPicture, 640, 
        480, false); 

在此行中的代码炸弹:

位图bitmapPicture = BitmapFactory.decodeByteArray(为arg0,0, arg0.length);

它说其:

异常类java.lang.OutOfMemoryError 源方法BitmapFactory.nativeDecodeByteArray()。

请帮助

+0

看来你的图片太大创建位图。 –

+0

请阅读此处:http://stackoverflow.com/questions/1955410/bitmapfactory-oom-driving-me-nuts/ –

回答

4

如果你只是想将图片保存到SD卡中,就没有必要创建位图。比方说,你想获得的图像是> = 640像素宽:

final int DESIRED_WIDTH = 640; 

// Set inJustDecodeBounds to get the current size of the image; does not 
// return a Bitmap 
final BitmapFactory.Options sizeOptions = new BitmapFactory.Options(); 
sizeOptions.inJustDecodeBounds = true; 
BitmapFactory.decodeByteArray(data, 0, data.length, sizeOptions); 
Log.d(TAG, "Bitmap is " + sizeOptions.outWidth + "x" 
      + sizeOptions.outHeight); 

// Now use the size to determine the ratio you want to shrink it 
final float widthSampling = sizeOptions.outWidth/DESIRED_WIDTH; 
sizeOptions.inJustDecodeBounds = false; 
// Note this drops the fractional portion, making it smaller 
sizeOptions.inSampleSize = (int) widthSampling; 
Log.d(TAG, "Sample size = " + sizeOptions.inSampleSize); 

// Scale by the smallest amount so that image is at least the desired 
// size in each direction 
final Bitmap result = BitmapFactory.decodeByteArray(data, 0, data.length, 
     sizeOptions); 

有很多其他有趣的设置在BitmapFactory.Options

相关问题