android位图库中的getWidth()函数';t返回真实图像高度

android位图库中的getWidth()函数';t返回真实图像高度,android,width,renderscript,android-bitmap,Android,Width,Renderscript,Android Bitmap,我想使用android.graphics.Bitmap库通过我的android应用程序加载一个.PNG图像。我已成功加载它,但有一些问题我无法解决 我的图像像素数是144*144,但当我尝试使用getWidth()函数获取加载图像的宽度时,它返回432,即144*3 以下是我尝试加载图像的方式: mBitmapIn = loadBitmap(R.drawable.data); 其中loadBitmap函数定义为: private Bitmap loadBitmap(int resource)

我想使用android.graphics.Bitmap库通过我的android应用程序加载一个.PNG图像。我已成功加载它,但有一些问题我无法解决

我的图像像素数是144*144,但当我尝试使用getWidth()函数获取加载图像的宽度时,它返回432,即144*3

以下是我尝试加载图像的方式:

mBitmapIn = loadBitmap(R.drawable.data);
其中loadBitmap函数定义为:

private Bitmap loadBitmap(int resource) {
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    return BitmapFactory.decodeResource(getResources(), resource, options);
}
如果有人能帮我找出原因,我将不胜感激


感谢

可绘制的
文件夹被认为具有
mdpi
的密度(即基线密度)。Nexus 5的密度为445ppi,属于
xxhdpi
类别。因此,如果您读取的位图不在
drawable xxhdpi
目录中,系统将不得不在另一个目录中找到它并对其进行缩放
xxhdpi
屏幕的密度大约是
mdpi
屏幕的3倍。由于您在
res
下的唯一可绘制文件夹是
drawable
本身,因此android将其沿两个维度缩放3倍


您可以获得有关此的更多信息

您可以发布用于加载图像并调用getWidth()的代码吗?我已经发布了问题中的代码,谢谢您是否尝试从android res文件夹加载图像?如果是这样,您是否将位图存储在
mdpi
文件夹中,并且您使用的实际设备/仿真器的分辨率为
xxhdpi
呢?我使用的是Android Studio,其中只有一个用于drawable的文件夹,名为drawable,另外,我正在使用默认的adb,即屏幕分辨率为1920*1080的nexus 5。感谢您的详细回答,如果可能的话,我想问另一个问题:当我尝试加载分辨率为2560*1440的图像时,应用程序崩溃,甚至无法启动,我的文件夹目录是否再次出现问题?(图像再次位于drawable文件夹中,而且我的应用程序正在使用renderscript,我正在尝试分配我的图像进行一些图像处理)谢谢我不熟悉renderscript,但我可能对你的应用程序崩溃的原因有一些想法。您说您从
drawable
文件夹加载了一个2560 x 1440的图像。Android将放大Nexus5的图像(3倍)。因此,图像的分辨率为7680 x 4320,相当于33177600像素。考虑到每个像素需要32位(红色、绿色、蓝色和alpha通道各8位)才能在位图中读取,您应该至少有1061683200位=126.5625 MB。如果系统找不到一块约127MB的可用内存,应用程序将崩溃,并显示OOM错误感谢您的帮助:)