簡體   English   中英

Android:在另一個位圖上繪制多個位圖

[英]Android: Draw multiple bitmaps on another bitmap

我試圖從多個較小的位圖合成背景位圖。 我正在使用Eclipse和Android SDK。

我已經加載了(大部分)空白背景位圖(像素尺寸為320x480),如下所示:

Bitmap mBackground = BitmapFactory.decodeResource( res, R.drawable.background );

然后我以相同的方式加載位圖'tile'(128x128)。

我已經嘗試了多種方法將圖塊繪制到位圖上,但每種方法都不能按照我希望的方式工作。 我想繪制縮小到64x64並位於背景位圖上特定位置(像素偏移)的切片位圖。

1)使用畫布......

Canvas c = new Canvas( mBackground );
c.drawBitmap( mTile, null, new Rect( 10, 10, 73, 73 ), null );

這會使得瓷磚太大(不是全尺寸,不是64x64,而是介於兩者之間,約占原始尺寸的66%)

2)使用drawables(基本上看起來是一樣的):

Canvas c = new Canvas( mBackground );
c.translate( 10, 10 );
d.setBounds( 0, 0, 63, 63 );
d.draw( c );

與實驗#1相同的結果......

文檔在很多地方提到(沒有任何簡明的解釋),這與設備獨立的'密度'有關,因此我嘗試了下一個方法......

3)使用固定規模資源。 我創建了/ res / drawable-nodpi(我也嘗試過/ res / drawable)文件夾並將我的資源(背景和平鋪png圖像)移動到其中。 從背景位圖創建Canvas時會導致異常,因為未縮放的位圖顯然變為不可變,因此無法分配給Canvas!

4)我嘗試使用BitmapFactory.Options並將inScaled設置為false,並將這些選項傳遞給后台和tile的decodeResource調用。 這與#3完全相同(拋出異常)。

沒有任何工作,它變得非常令人沮喪。 我確信我只是缺少一些位圖特有的細節,當涉及到不同的坐標空間但我無法在文檔或其他地方找到它(我嘗試過多個android開發網站無濟於事)。

希望有人這樣做會看到這個請求! 謝謝你,傑森

看起來你的位圖的密度是不同的...這里有一個類似的問題 您應該檢查加載的每個位圖的密度,看看它是否是同一個問題。

Canvas.drawBitmap()不執行縮放afaik。

由於您的磁貼圖像最初是128x128,並且您希望以64x64繪制它,最簡單的技巧是調用decodeResource()並使用減小其大小的選項:

BitmapFactory.Options options = new BitmapFactory.Options()
options.inSampleSize = 2; // downscale by 50%
Bitmap mTile = BitmapFactory.decodeResource( res, R.drawable.tile, options );

要進行更強大的縮放(例如,以任何大小繪制圖像),您應該將其包裝在BitmapDrawable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM