2013-08-19 116 views
1

好吧,所有這些東西折磨我很長一段時間,我設置了一個227像素高的圖像,將其縮放到170像素,即使我希望它是wrap_content,我也可以。java Android - 以編程方式處理圖像縮放/裁剪

好的。在這裏,我把我的圖像是1950像素長(我把它放在這裏的一部分,所以你可以瞭解它應該是什麼樣子)。

enter image description here

首先,我要縮放回227個像素高,因爲這是它是如何設計的,它應該如何

Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.ver_bottom_panel_tiled_long); 
      int width = bitmapOrg.getWidth(); 
     int height = bitmapOrg.getHeight(); 
     int newWidth = 200; //this should be parent's whdth later 
     int newHeight = 227; 

     // calculate the scale 
     float scaleWidth = ((float) newWidth)/width; 
     float scaleHeight = ((float) newHeight)/height; 

     // create a matrix for the manipulation 
     Matrix matrix = new Matrix(); 
     // resize the bit map 
     matrix.postScale(scaleWidth, scaleHeight); 

     // recreate the new Bitmap 
     Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, 
          width, height, matrix, true); 


     BitmapDrawable dmpDrwbl=new BitmapDrawable(resizedBitmap); 

    verbottompanelprayer.setBackgroundDrawable(dmpDrwbl); 

所以......它不是一個裁剪圖像在所有 - 不,它是1950像素壓入200像素。 enter image description here

,但我想只是削減除了這個200個像素或什麼的寬度,我會設置什麼 - 作物,而不是按這一切的長形圖像爲200個像素面積。

另外,BitmapDrawable(位圖位圖);和imageView.setBackgroundDrawable(drawable);已棄用 - 我該如何改變這種情況?

回答

4

根據我所看到的,您創建了一個新尺寸的位圖(200x227),所以我不確定您的預期。你甚至寫了一首歌,你擴展的意見和種植無字...

你可以做的是:

  1. 如果API是至少10(薑餅),你可以使用BitmapRegionDecoder,使用decodeRegion

  2. 如果API太舊,需要大量位圖解碼,然後將它裁剪成一個新的位圖,使用Bitmap.createBitmap

是這樣的:

final Rect rect =... 
if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD_MR1) 
    { 
    BitmapRegionDecoder decoder=BitmapRegionDecoder.newInstance(imageFilePath, true); 
    croppedBitmap= decoder.decodeRegion(rect, null); 
    decoder.recycle(); 
    } 
else 
    { 
    Bitmap bitmapOriginal=BitmapFactory.decodeFile(imageFilePath, null); 
    croppedBitmap=Bitmap.createBitmap(bitmapOriginal,rect.left,rect.top,rect.width(),rect.height()); 
    } 
+0

能否請您給我的例子,如何用Bitmap.CreateBitmap裁剪呢?它只是還沒有收穫,只是試圖把整個圖像放進去。可能是我做錯了什麼? – user2234594

+0

你檢查了我剛給你的鏈接嗎?你需要使用正確的功能。無論如何,我寫了一個示例代碼,但我不確定它是否編譯良好。 –

+0

好吧,這就是問題所在 - 我很想使用BitmapRegionDecoder,但它僅適用於文件。但我想用資源 - 不同的dpi。處理文件會使這變得複雜。有什麼辦法使用BitmapRegionDecoder的資源? – user2234594