2013-12-09 46 views
0

我只是用這個代碼的形式開發者的網站上的屏幕地產擴展位圖,如何根據現有的

public static int calculateInSampleSize(BitmapFactory.Options options,int reqWidth,int reqHeight){ 
    //Raw height & width of the image 

    final int height = options.outHeight; 
    final int width = options.outWidth; 
    int inSampleSize = 1; 

    if (height>reqHeight || width>reqWidth) { 
     //Calculate ratios of height & width to requested height & width. 
     final int heightRatio = Math.round((float)height/(float)reqHeight); 
     final int widthRatio = Math.round((float)width/(float)reqWidth); 


     inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; 
    } 
    return inSampleSize; 
} 

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); 
} 

通過使用此代碼我真的成功地調用縮放位圖使用這行代碼我ImageViews,

image.setImageBitmap(decodeSampledBitmapFromresource(getResources(), resId, width, height)); 

image.setImageBitmap(decodeSampledBitmapFromresource(getResources(), res, 640, 360)); 

這行代碼實際上是將我的圖片縮放到我想要的任何尺寸。

但我在這裏面臨的問題是,「內存不足」。

  • 現在我擁有的圖片的最大尺寸是1280 * 720。

- 如何根據屏幕縮放比特位圖可用的房屋。

int screenDensity = getResources().getDisplayMetrics().densityDpi; 

這將返回屏幕密度,如160,320,480,600,720,....

ImageView image = new ImageView(this); 
    if (screenDensity<=240) { 
     image.setImageBitmap(decodeSampledBitmapFromresource(getResources(), res, 320, 180)); 
    } else if (screenDensity<=320) { 
     image.setImageBitmap(decodeSampledBitmapFromresource(getResources(), res, 430, 240)); 
    } else if (screenDensity<=640) { 
     image.setImageBitmap(decodeSampledBitmapFromresource(getResources(), res, 640, 360)); 
    } else { 
     image.setImageBitmap(decodeSampledBitmapFromresource(getResources(), res, 1280, 720)); 
    } 
    background_image.addView(image); 

我第一次運行:

我根據設備的密度使用陷害我的代碼在一臺設備上,我意識到自己在一個錯誤的軌道上,對於一些具有大屏幕的Local Phablets,Tablets,mobile,屏幕密度較低。

例如,

  • Micromax的CanvasA116具有大於1280×720的屏幕分辨率,但小於320的整數值的密度下降低。
  • 一些本土平板具有相同的屏幕分辨率小於160
  • 索尼XPERIA電子商務屏幕像素密度爲320 * 480的屏幕分辨率爲320

的屏幕像素密度下來得那麼,對的Xperia E類設備我的上面的方程是完美的。但對於屏幕分辨率較高的設備,但在低屏幕密度設備上,應用的圖像實際上完全是BLURRED或OUTSHAPED,無法識別。

我也試過使用因子屏幕寬度和高度。但對於低堆設備來說,這太致命了。

所以,現在的問題是:

我怎樣才能完美地按比例調整我的位圖到設備無關密度&決議。由於在這種情況下,Bitmpa的寬度&高度是完全未知的!

+0

使用縮略圖和有ü可以指定尺寸也縮略圖 – KOTIOS

+0

這裏看到我的回答是:http://計算器。com/questions/17744966 /如何從照片中拍攝縮略圖 – KOTIOS

+0

感謝莫妮卡的迴應。在你的解決方案中,如何獲取THUMBSIZE&我有圖像動態加載 –

回答

0

我希望這個代碼是對你有幫助,檢查圖像的

public static Bitmap resizeImageWithOrignal(Bitmap orignal, int maxDimension) { 
    // load the origial BitMap 
    int width = orignal.getWidth(); 
    int height = orignal.getHeight(); 

    if (width > maxDimension || height > maxDimension) { 
     int new_width; 
     int new_height; 
     float ratio = (float) width/height; 
     if (ratio > 1.0f) { 
      new_width = maxDimension; 
      new_height = (int) ((float) new_width/ratio); 
     } else { 
      new_height = maxDimension; 
      new_width = (int) ((float) new_height * ratio); 
     } 
     float scaleWidth = ((float) new_width)/width; 
     float scaleHeight = ((float) new_height)/height; 
     Matrix matrix = new Matrix(); 
     matrix.postScale(scaleWidth, scaleHeight); 
     Bitmap resizedBitmap = Bitmap.createBitmap(orignal, 0, 0, width, 
       height, matrix, true); 
     return resizedBitmap; 
    } 
    return orignal; 
}