Java 哪些画布和位图方法可以通过dpi(Android)进行缩放?

Java 哪些画布和位图方法可以通过dpi(Android)进行缩放?,java,android,android-canvas,dpi,android-bitmap,Java,Android,Android Canvas,Dpi,Android Bitmap,我知道android会自动缩放dpi从res/drawable加载的位图。当我加载游戏资源时,我用BitmapFactory选项手动关闭它,例如tileset //Loads Bitmaps for the tileset public void loadTiles(int s) { Bitmap subimage = null; BitmapFactory.Options o = new BitmapFactory.Options(); o.inScaled = fal

我知道android会自动缩放dpi从res/drawable加载的位图。当我加载游戏资源时,我用BitmapFactory选项手动关闭它,例如tileset

//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();
    }
}
canvas.drawBitmap()是否使用dpi进行缩放?或者,在loadTiles(int s)方法中获取子图像的方式是否发生了缩放?我检查了加载到loadTiles中的位图的宽度/高度,它们是我想要的大小

注意:我自己将最终图像缩放到屏幕上,绘制到画布上的所有位图的大小应与dpi无关

编辑: 下面是一些正在发生的事情的图片。。。 这是mdpi,它应该是这样的

这是hdpi,请注意事物是如何过度缩放和重叠在它们之前绘制的平铺的

这是ldpi,注意瓷砖太小,它们之间留有空间
img42/420e938b3eebc503247cd0181b779402fe.png

我猜出来了。我正在阅读Canvas的文档,当通过调用加载画布和位图时,我必须在画布和位图上设置密度

canvas.setDensity(DisplayMetrics.DENSITY_MEDIUM);
bitmap.setDensity(DisplayMetrics.DENSITYMEDIUM);
相关文件:


我还可以将所有图像的像素密度设置回系统像素密度,在我从它们的工作表中加载它们的子图像之后,这样游戏会看起来更好,并且缩放/倾斜更少。drawBitmap()方法不缩放位图,它们以1:1的比例绘制它,这就是我的想法,但我不明白为什么它只在mdpi设备上看起来是正确的。我想知道的主要事情是什么方法可以自动缩放位图。例如,BitmapFactory.decodeResource(),但是你禁用了它,不是吗?是的。稍后我会上传一些正在发生的事情的截图。少了什么?请详细说明这个答案是一年前写的,所以我所做的编辑只是我当时想表达的意思。
canvas.setDensity(DisplayMetrics.DENSITY_MEDIUM);
bitmap.setDensity(DisplayMetrics.DENSITYMEDIUM);