【问题标题】:Bitmap getWidth returns wrong value位图 getWidth 返回错误值
【发布时间】:2011-11-19 23:50:02
【问题描述】:

我的 android 应用程序可绘制文件夹中有一个 jpg 图像,分辨率为 1000x600。 我像这样将该图像加载到位图

 Bitmap bitMap = BitmapFactory.decodeResource(getResources(), R.drawable.image);

之后我调用bitMap .getWidth(),它返回1500。怎么可能?以及如何获得正确的图像宽度和高度?

【问题讨论】:

    标签: java android android-bitmap


    【解决方案1】:

    这可能是因为密度不同。您的资源可能存储在中等密度的文件夹中,但您的设备是 hdpi。中密度为160dpi,高密度为240dpi。因此,您的位图被缩放到原来大小的 1.5 倍。请参阅document on multiple screens 了解更多信息。

    如果资源没有以正确的密度可用,系统会加载默认资源并根据需要放大或缩小它们以匹配当前屏幕的密度。

    如果您打算将其用于高密度,请将其放入 drawable-hdpi 而不是 drawable 或 drawable-mdpi。

    更新:

    如果您希望它忽略密度,请将其放在 drawable-nodpi 文件夹中。也来自同一个文档:

    避免预缩放的最简单方法是将资源放在带有 nodpi 配置限定符的资源目录中。例如:

    res/drawable-nodpi/icon.png
    

    当系统使用该文件夹中的icon.png位图时,不会根据当前设备密度进行缩放。

    【讨论】:

    • 在我的情况下,我不需要缩放,我需要所有屏幕尺寸相同的相同图像。我想到的第一个解决方案是将该图像复制到 3 个可绘制文件夹,但拥有相同图像的 3 个副本并不是一个好主意。还有其他解决方案吗?
    • 如果您不想缩放它们,可以将它们放在一个名为 drawable-nodpi 的文件夹中。更多信息在这里:developer.android.com/guide/topics/resources/…
    • 好的,已编辑答案并添加了该部分,谢谢
    • 赞成 drawable-nodpi 建议。我有 512x512 像素的位图,需要在 4x4 网格中绘制,但由于原始位图被放大到 1408x1408,内存不足。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 2016-11-13
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多