2012-07-01 137 views
1

我需要解決由位圖大小拋出的OutOfMemory錯誤。圖像質量android

我用這個代碼:

public static Bitmap decodeSampledBitmapFromSDcard(String file, 
      int reqWidth, int reqHeight) { 

     // First decode with inJustDecodeBounds=true to check dimensions 
     final BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inJustDecodeBounds = true; 
     BitmapFactory.decodeFile(file, options); 

     // Calculate inSampleSize 
     options.inSampleSize = calculateInSampleSize(options, reqWidth, 
       reqHeight); 

     // Decode bitmap with inSampleSize set 
     options.inJustDecodeBounds = false; 
     return BitmapFactory.decodeFile(file, options); 
    } 

    public static int calculateInSampleSize(BitmapFactory.Options options, 
      int reqWidth, int reqHeight) { 
     // Raw height and width of image 
     final int height = options.outHeight; 
     final int width = options.outWidth; 
     int inSampleSize = 1; 

     if (height > reqHeight || width > reqWidth) { 
      if (width > height) { 
       inSampleSize = Math.round((float) height/(float) reqHeight); 
      } else { 
       inSampleSize = Math.round((float) width/(float) reqWidth); 
      } 
     } 
     return inSampleSize; 
    } 

,但圖像的質量較差。

我需要另一種方式來調整圖像的大小,使其位圖對象很小,並破壞質量。

回答

0
int newWidth = 640; 
int newHeight = 480; 
loat scaleWidth = ((float) newWidth)/width; 
float scaleHeight = ((float) newHeight)/height; 
Matrix matrix = new Matrix(); 
             matrix.postScale(scaleWidth, scaleHeight); 

Bitmap nResizedBitmap = Bitmap.createBitmap(b, 0, 0, width, height, matrix,true); 
                       FileOutputStream out = new FileOutputStream(...outfile...);           nResizedBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);