2015-05-09 106 views
0

我目前正在加載可以是橫向或縱向的圖像。設置基於最小高度和寬度的android位圖大小保持寬高比

我然後想要調整位圖的大小直接繪製到全屏圖像的畫布上。

我需要保持高寬比,但圖像不適合屏幕,但剪掉任何比屏幕大的圖像。

我可以調整它,它具有以下適合屏幕:

Matrix m = new Matrix(); 
m.setRectToRect(new RectF(0, 0, b.getWidth(), b.getHeight()), new RectF(0, 0, MyWallpaperService.this.width, MyWallpaperService.this.height),  Matrix.ScaleToFit.CENTER); 
b = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(), m, true); 

,但我不希望有在頂部/底部或兩側的黑邊,但我想不出例程的正確調整爲此。

+0

只需設置ImageView ScaleType即可。任何不使用ScaleType的原因。 – Sharj

+0

這是一個動態壁紙,我直接繪製到畫布上,需要調整圖像大小以便更快處理,因爲原始圖像可以由用戶選擇,它們可以非常大或小於屏幕尺寸。 – Andrew

+0

你不需要'Bitmap.createBitmap',當調用'Canvas.drawBitmap'時只需要使用原始的'Bitmap'和計算的'Matrix' – pskink

回答

1

當您將圖像繪製到畫布上時,第一步是根據屏幕大小和原始圖像寬高比計算最終圖像所需的尺寸。

然後使用Bitmap類中的靜態函數createScaledBitmap調整您的位圖大小以匹配計算的尺寸。確保只調用一次該函數並存儲位圖以便在繪圖例程中使用。

最後繪製位圖,所以只有你想看到的位圖區域在屏幕上。

更多的內存友好方法是在調用Bitmap.createScaledBitmap之前添加另一個步驟來使用Bitmap.createBitmap裁剪圖像。這減少了用戶選擇細長的源圖像時遇到內存問題的機會。

相關問題