gpt4 book ai didi

android - BitmapFactory getWidth() getHeight() 与实际图片尺寸像素不同

转载 作者:行者123 更新时间:2023-11-30 01:07:31 26 4
gpt4 key购买 nike

我是 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 文件夹中有图像时,您调用 BitmapFactory.decodeResource() 在具有 xxxhdpi 密度的设备上,BitmapFactory 会为您放大位图,这样当您在 xxxhdpi 屏幕上显示它时,它看起来与在低密度屏幕上的比例相同。

如果您决定真的不希望这种情况发生,请将图像放在/res/drawable-nodpi 文件夹中。然后它将在每个平台上以相同的大小解码。但是,当您显示图像时,图像在不同密度的设备上看起来会非常不同。

关于android - BitmapFactory getWidth() getHeight() 与实际图片尺寸像素不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38737386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com