2013-07-10 61 views
0

我的要求是存儲在數據庫中的圖像的大小(寬度,高度而不是文件大小),我需要檢索圖像的簡單護照大小。如何在Android中實用地縮小圖像的寬度和高度?

我的代碼是:

byte[] imgByte=null; 

在onCreate方法

imageview=new ImageView(this); 
imageview.setLayoutParams(llp2); 
imgByte=cursor.getBlob(cursor.getColumnIndex("imagestore")); 
imageview.setScaleType(ScaleType.CENTER); 
imageview.setImageBitmap(BitmapFactory.decodeByteArray(imgByte, 0, imgByte.length)); 
layout.addView(imageview) 

當我顯示該只顯示什麼都大小之前進入。所以我需要在android中適應該圖像大小。

我想這些鏈接

Reduce size of Bitmap to some specified pixel in Android

但這裏的問題是,我在字節得到的圖像。但所有代碼圖像數據類型只有int。我可以得到正確的解決方案來務實降低圖像尺寸嗎?

+0

將圖像視圖的maxwidth和maxheight設置爲100dp。 – OMAK

+0

無法理解您的問題。赦免。 –

回答

0

您可以使用以下代碼來創建示例大小的圖像。這將返回Bitmap

public static Bitmap decodeSampledBitmapFromResource(Resources res, 
     int resId, int reqWidth, int reqHeight) { 

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

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

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 
    return BitmapFactory.decodeResource(res, resId, 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) { 

     // Calculate ratios of height and width to requested height and 
     // width 
     final int heightRatio = Math.round((float) height 
       /(float) reqHeight); 
     final int widthRatio = Math.round((float) width/(float) reqWidth); 

     // Choose the smallest ratio as inSampleSize value, this will 
     // guarantee 
     // a final image with both dimensions larger than or equal to the 
     // requested height and width. 
     inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; 
    } 

    return inSampleSize; 
} 

使用此代碼,

decodeSampledBitmapFromResource(getResources(),R.drawable.xyz, 100, 100); 

在這裏,100 * 100的樣本大小您提供。所以這樣大小的縮略圖將被創建。

編輯

要使用字節[]中的代碼,使用以下短的代碼。

public static Bitmap decodeSampledBitmap(byte[] data, int reqWidth, 
     int reqHeight) { 

    // First decode with inJustDecodeBounds=true to check dimensions 
    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeByteArray(data, 0, data.length, options); 

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

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 
    return BitmapFactory.decodeByteArray(data, 0, data.length, options); 
} 
+0

烏爾的代碼很好..但我已經做到了。這裏的事情是我沒有得到可繪製的圖像。我從數據庫中獲得。和我轉換成字節的圖像。 decodeSampledBitmapFromResource(getResources(),imgByte,100,100);在這種方式下,我寫道,總行顯示錯誤。 Display類型中的decodeSampledBitmapFromResource(Resources,int,int,int)方法不適用於參數(Resources,byte [],int,int),那麼我該怎麼做? – Shankar

+0

所以你想縮放字節? –

+0

是的..看到我的代碼上面imgByte = cursor.getBlob(cursor.getColumnIndex(「imagestore」));這是我用來獲取數據庫映像的行。你能幫我嗎? – Shankar

相關問題