2011-12-07 153 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

相關問題