2012-10-09 46 views
7

你好我工作的一個很好的Android應用程序,我需要大的位圖適合小尺寸imageview。我使用的大小imageview300dp X 300dp顯示大的圖像1024 X 780適合大型圖像分成小的ImageView與良好的質量與原始圖像?

我怎樣才能讓大的圖像爲小,好質量的原始圖像?

+3

你應該讓大小300×300的縮略圖,但保持其縱橫比。您可以在畫布上繪製較大的圖像,並以某種顏色填充剩餘的空間。 –

回答

0

@Nikola評論回答了我的問題。我在答案中寫了這個以便它對未來的讀者有好處

您應該製作尺寸爲300x300的縮略圖圖像,但保留其縱橫比。您可以在畫布上繪製較大的圖像,並以某種顏色填充剩餘的空間。

0

你嘗試im.setScaleType(ScaleType.FIT_XY)

+1

**不要使用此爲**'FIT_XY'不*不*保持縱橫比,並伸展你的形象。 'FIT_CENTER'會更合適。 – kcoppock

9

試試這個:

public static Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) { 
    int width = bm.getWidth(); 
    int height = bm.getHeight(); 
    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(bm, 0, 0, width, height, 
      matrix, false); 
    return resizedBitmap; 

} 

使用方便:

Bitmap bmResized=getResizedBitmap(yourBitmap,newHeight,newWidth); 

,你會得到你的調整後的圖像

注:如果要調整資源圖片使用此轉換爲位圖:

Bitmap bmOrginal=BitmapFactory.decodeResource(this.getResources(), R.drawble.yourRes); 
Bitmap bmResized=getResizedBitmap(bmOrginal,newHeight,newWidth); 

然後設置調整後的圖像:

image.setImageBitmap(bmResized); 
+0

由於過濾器在Android中的工作方式,爲了獲得高質量的調整大小,我發現如果源和目標大小相差超過2倍,則需要在至少兩次調整大小時進行調整。在1024x780到300x228的情況下,我會通過兩遍:1024x780 [超過2x的dest,所以]→600x456 [dest的2倍]→300x228。 但是,這很慢,可能是不必要的(這是一個性能/質量折衷)。 – user1410657

+0

+1謝謝你!你救了我的一天!它像一個魅力。再次感謝。 – Sajmon

+0

很好的解決方案感謝 – kathir