我知道android會自動縮放通過dpi加載res/drawable的Bitmaps。當我爲我的遊戲加載資源時,我使用BitmapFactory選項手動關閉它,例如tileset。哪些Canvas和Bitmap方法可通過dpi(Android)進行縮放?
//Loads Bitmaps for the tileset
public void loadTiles(int s) {
Bitmap subimage = null;
BitmapFactory.Options o = new BitmapFactory.Options();
o.inScaled = false;
Bitmap tileset = BitmapFactory.decodeResource(activity.getResources(), s, o);
try {
numTilesAcross = tileset.getWidth()/tileSize;
tiles = new Tile[3][numTilesAcross];
for(int col = 0; col < numTilesAcross; col++) {
subimage = Bitmap.createBitmap(tileset,
col * tileSize,
0,
tileSize,
tileSize
);
tiles[0][col] = new Tile(subimage, Tile.UNBLOCKED);
subimage = Bitmap.createBitmap(tileset,
col * tileSize,
tileSize,
tileSize,
tileSize
);
tiles[1][col] = new Tile(subimage, Tile.BLOCKED);
subimage = Bitmap.createBitmap(tileset,
col * tileSize,
2 * tileSize,
tileSize,
tileSize
);
tiles[2][col] = new Tile(subimage, Tile.TRIGGER);
}
}
catch(Exception e) {
e.printStackTrace();
}
}
問題是,當我把它們畫到我的畫布(然後吸引到從表面上看),如果我考的比MDPI瓷磚縮放與間距太小下任何DPI的遊戲,如果我對任何高於他們繪製得太大和重疊的東西進行測試。
主要問題是什麼方法使用dpi係數進行縮放。我使用
//tiles[r][c].getImage() returns a Bitmap
canvas.drawBitmap(
tiles[row][col].getImage(),
(int)x + col * tileSize,
(int)y + row * tileSize,
null
);
canvas.drawBitmap()是否使用dpi進行縮放?或者是我在我的loadTiles(int s)方法中獲取子圖像的方式發生縮放?我檢查了loadTiles中加載的位圖的寬度/高度,它們是我想要的大小。
注意:我將最終圖像縮放到屏幕上,所有繪製到畫布的位圖大小都應該與dpi無關。
編輯: 這裏有一些照片是怎麼回事... 這是MDPI,這是它應該是怎樣看 http://cdn.img42.com/e9359c298455d505c3317bd705372030.png
這是華電國際,注意的事情是如何超標度和重疊瓷磚畫前,他們 http://cdn.img42.com/540b7896947049250fea3f3fa5a08331.png
這是LDPI,注意瓷磚如何太小,他們留出空間,其間 img42/420e938b3eebc503247cd0181b779402fe.png
'Canvas.drawBitmap()'方法**不要**縮放位圖,他們繪製它1:1 – pskink
這就是我的想法,但我不明白爲什麼它只看起來正確的mdpi設備。我想知道的主要是自動縮放位圖的方法。 –
BitmapFactory.decodeResource()例如,但你禁用了你沒有嗎? – pskink