2013-06-26 83 views
1

我的相機具有3264x1952的JPEG。這個文件大約是1.7兆字節。在不改變分辨率的情況下縮小大型JPEG的尺寸

我想知道是否有壓縮這個圖像到一個較小的文件大小沒有改變分辨率。即我希望我的合成圖像也是3264x1952。

我甚至無法使用inSampleSize選項來縮小圖像,而是將此JPEG作爲位圖打開。

任何人都知道我的選擇是什麼?有什麼辦法可以減少色位深度/增加壓縮/降低質量?

編輯: 我特別尋找Android解決方案。主要問題是我無法打開完整的res JPEG而沒有遇到OOM錯誤,所以我不知道如何繼續。

理想我想這樣做:

bitmap.compress(Bitmap.CompressFormat.JPEG, 50, out); 

但是,應用程序會崩潰,當我做:

Bitmap bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); 
+0

的[編程方式降低JPEG文件的大小(http://stackoverflow.com/questions/6830478/programatically-reducing-jpeg-file-size) – Burkhard

+0

降低影像質量的話.. – Riser

+0

@Segi可能重複我不能降低我的圖像質量,因爲我無法打開該文件作爲位圖的第一位... – blinduck

回答

1

您可以使用BitmapFactory.decodeFile方法將第二參數作爲BitmapFactory.Options對象並使用inSampleSize來縮放圖像。例如,inSampleSize = 2將產生width/2height/2,的輸出圖像。請記住,您的位圖總是需要width x heigth x 4字節的內存

0

您需要縮小圖像。

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

使用適當的Bitmap.decode方法並縮小圖像。

Bitmap.decode

實施例:

調用具有所需的參數的方法。

public static Bitmap decodeFile(File f,int WIDTH,int HIGHT){ 
try { 
    //Decode image size 
    BitmapFactory.Options o = new BitmapFactory.Options(); 
    o.inJustDecodeBounds = true; 
    BitmapFactory.decodeStream(new FileInputStream(f),null,o); 

    //The new size we want to scale to 
    final int REQUIRED_WIDTH=WIDTH; 
    final int REQUIRED_HIGHT=HIGHT; 
    //Find the correct scale value. It should be the power of 2. 
    int scale=1; 
    while(o.outWidth/scale/2>=REQUIRED_WIDTH && o.outHeight/scale/2>=REQUIRED_HIGHT) 
     scale*=2; 

    //Decode with inSampleSize 
    BitmapFactory.Options o2 = new BitmapFactory.Options(); 
    o2.inSampleSize=scale; 
    return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
} catch (FileNotFoundException e) {} 
return null; 
} 
相關問題