Я знаю, что Android автоматически масштабирует растровые изображения, загруженные из res/drawable с помощью dpi. Я вручную отключил это с помощью параметров BitmapFactory, когда загружаю ресурсы для своей игры, такие как набор плиток.
//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();
}
}
Проблема в том, что когда я рисую их на своем холсте (который затем рисуется в представлении поверхности), если я тестирую игру с любым разрешением dpi ниже, чем mdpi, плитки масштабируются слишком мало с промежутком между ними, и если я тестирую что-то более высокое, они нарисованы слишком большими и перекрываются.
Главный вопрос заключается в том, какие методы масштабируются с использованием коэффициента 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
Это hdpi, обратите внимание, как объекты масштабируются и накладываются на плитку, нарисованную перед ними /540b7896947049250fea3f3fa5a08331.png
Это ldpi, обратите внимание, что плитки слишком маленькие и оставляют место между img42/420e938b3eebc503247cd0181b779402fe.png
Canvas.drawBitmap()
методы НЕ масштабируют растровое изображение, они рисуют его 1:1 - person pskink   schedule 15.04.2015