BitmapFactory getWidth() getHeight() 与实际图片尺寸像素不同
BitmapFactory getWidth() getHeight() and pixels from actual picture size differ
我是 Android Studio 的新手,在与 BitmapFactory 相关的任务中,我特别困惑。
我遇到的问题如下。当我在可绘制文件夹下插入一个尺寸为 (578x496) 的 jpg 文件时,我这样做
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.background1));
Log.e("WIDTH", String.valueOf(mBitmap.getWidth());
Log.e("HEIGHT", String.valueOf(mBitmap.getHeight());
我得到的是(2312x1984)尺寸,比实际尺寸整整x4倍。是因为我的文件格式是jpg而不是png吗?
所以我决定做的是
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.background1,options));
然后通过
将其设置为我的 SurfaceView 的背景
public class GamePanel extends SurfaceView implements SurfaceHolder.Callback {
public static final int WIDTH=578;
public static final int HEIGHT=496;
....
@Override
public void draw(Canvas canvas){
final int scaleXFactor = getWidth()/WIDTH;
final int scaleYFactor = getHeight()/HEIGHT;
if(canvas!=null){
final int savedState = canvas.save();
canvas.scale(scaleXFactor,scaleYFactor);
bg.draw(canvas);
canvas.restoreToCount(savedState);
}
}
但是这个 canvas.scale(scaleXFactor,scaleYFactor) 只允许背景适合水平而非垂直。所以就像
--------------------------------------
| IMG |
| |
|-------------------------------------| <-Viewed as "Landscape"
| Black Empty Screen |
| |
|-------------------------------------|
到目前为止,我的理解是位图在 Android Studio 制作的任何类型的应用程序中都是非常重要的概念,如果未正确实现,它会导致应用程序因 OOM 错误而崩溃或简单地降低应用程序的速度.请让我了解一下这个可怜的人,那里的专家。
当您在 /res/drawable
或 /res/drawable-mdpi
文件夹中有图像,并且您在具有 xxxhdpi
密度的设备上调用 BitmapFactory.decodeResource()
时,BitmapFactory
将缩放为您调高位图,这样当您在 xxxhdpi
屏幕上显示它时,它看起来与在低密度屏幕上的比例相同。
如果您决定确实不希望发生这种情况,请将图像放在/res/drawable-nodpi
文件夹中。然后它将在每个平台上以相同的大小解码。但是,当您显示图像时,图像在不同密度的设备上看起来会非常不同。
我是 Android Studio 的新手,在与 BitmapFactory 相关的任务中,我特别困惑。
我遇到的问题如下。当我在可绘制文件夹下插入一个尺寸为 (578x496) 的 jpg 文件时,我这样做
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.background1));
Log.e("WIDTH", String.valueOf(mBitmap.getWidth());
Log.e("HEIGHT", String.valueOf(mBitmap.getHeight());
我得到的是(2312x1984)尺寸,比实际尺寸整整x4倍。是因为我的文件格式是jpg而不是png吗?
所以我决定做的是
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.background1,options));
然后通过
将其设置为我的 SurfaceView 的背景public class GamePanel extends SurfaceView implements SurfaceHolder.Callback {
public static final int WIDTH=578;
public static final int HEIGHT=496;
....
@Override
public void draw(Canvas canvas){
final int scaleXFactor = getWidth()/WIDTH;
final int scaleYFactor = getHeight()/HEIGHT;
if(canvas!=null){
final int savedState = canvas.save();
canvas.scale(scaleXFactor,scaleYFactor);
bg.draw(canvas);
canvas.restoreToCount(savedState);
}
}
但是这个 canvas.scale(scaleXFactor,scaleYFactor) 只允许背景适合水平而非垂直。所以就像
--------------------------------------
| IMG |
| |
|-------------------------------------| <-Viewed as "Landscape"
| Black Empty Screen |
| |
|-------------------------------------|
到目前为止,我的理解是位图在 Android Studio 制作的任何类型的应用程序中都是非常重要的概念,如果未正确实现,它会导致应用程序因 OOM 错误而崩溃或简单地降低应用程序的速度.请让我了解一下这个可怜的人,那里的专家。
当您在 /res/drawable
或 /res/drawable-mdpi
文件夹中有图像,并且您在具有 xxxhdpi
密度的设备上调用 BitmapFactory.decodeResource()
时,BitmapFactory
将缩放为您调高位图,这样当您在 xxxhdpi
屏幕上显示它时,它看起来与在低密度屏幕上的比例相同。
如果您决定确实不希望发生这种情况,请将图像放在/res/drawable-nodpi
文件夹中。然后它将在每个平台上以相同的大小解码。但是,当您显示图像时,图像在不同密度的设备上看起来会非常不同。