2013-01-10 46 views
3

我想繪製畫布中縮放的位圖(基於位圖和視圖大小)。問題是,如果我畫的位圖前縮放畫布:縮放畫布後位圖質量丟失

canvas.scale(1.5f,1.5f); 
canvas.drawBitmap(mBitmap, 0, 0, paint); 

這是結果:

aliased image

但如果不是縮放畫布我縮放位圖:

Bitmap scaled = Bitmap.createScaledBitmap(
     mBitmap, bitmapWidth, bitmapHeight, 
     true); 
canvas.drawBitmap(scaledBitmap, 0, 0, paint); 

結果要好得多: Correctly scaled image

問題是位圖非常大,並且在內存中原始和縮放的位圖都可能有問題。

每當位圖或視圖邊界發生變化時,是否有任何獲取第二個結果而不創建縮放位圖的方法?

+0

你爲'Paint'對象設置了「FILTER_BITMAP_FLAG」和「ANTI_ALIAS_FLAG」嗎? –

+0

缺少FILTER_BITMAP_FLAG是問題所在。謝謝! – Addev

回答

1

我的問題的解決方案是油漆尚未啓用FILTER_BITMAP_FLAG標誌。

1

請在源讀取位圖時,相應地擴大它(它是作爲一個額外的參數傳遞)在BitmapOptions繪圖畫布

canvas.drawBitmap(x,y,..., matrix...) 
1

使用inSampleSize當包含縮放信息的矩陣。

這是androids首選在幾乎所有情況下加載圖像的方式,以避免內存溢出,因爲完整圖像從未加載到內存中。

Loading BItmaps efficiently can be found here.

Android的文檔和範例代碼就如何從源中檢索所需大小的圖像。 (資源,文件等)

Loading Large Bitmaps Efficiently這兩種方法是你正在尋找的。