【问题标题】:Bitmap width/height different after loading from Resource从资源加载后位图宽度/高度不同
【发布时间】:2011-07-04 22:22:31
【问题描述】:

第一。我是 Android 编码的新手 :)

我所做的是从我的 res/drawable-mdpi 加载位图

BitmapFactory.decodeResource(getResources(), R.drawable.cat_ground_01);

在我注销位图的宽度/高度后,它会告诉我另一个值,然后位图实际上是。

这有点难以放置像素完美的位图,例如将面部位图与嘴部位图重叠。

也许我只是缺少有关此主题的一些知识:9 我希望你能帮忙。

【问题讨论】:

    标签: android bitmap width pixel


    【解决方案1】:

    你不能把资源放在nodpi文件夹里吗?

    即res/drawable-nodpi

    这是我过去所做的。

    【讨论】:

      【解决方案2】:

      在我注销位图的宽度/高度后,它会告诉我另一个值,然后位图实际上是。

      从 /drawable 加载位图后检查您的 options.inTargetDensity 和 options.inDensity。它们不相等(例如 160 和 240)。如果 options.inScaled 设置为 true(默认) - 这就是位图自动重新缩放的原因。

      另一种方法是使用 Bitmap.createScaledBitmap 在加载后重新缩放图像。因为有时你需要 inScaled=true

              //Target dimensions
              int iW = 300;
              int iH = 200;
              Bitmap mOriginalBitmap = new Bitmap;
              BitmapFactory.Options options = new BitmapFactory.Options();
              //Load image from resource
              mOriginalBitmap = BitmapFactory.decodeResource(getResources(), 
                      R.drawable.sample_image_900px, options);
              //Scale to target size
              mOriginalBitmap = Bitmap.createScaledBitmap(mOriginalBitmap, iW, iH, true); 
      

      【讨论】:

      • 这会带来额外的性能问题。当确实需要 inScaled 时,这是一种解决方法。
      【解决方案3】:

      当您执行 Bitmapfactory.decodeResource() 时,Android 默认会选择“匹配”的 dpi 版本进行解码,您提到的代码中发生的情况将产生:

      1. 您无法指定它是 mdpi、hdpi 还是其他格式,它将选择与您正在运行的系统匹配的版本。即,如果您在 mdpi 设备上运行,它将解码 mdpi 版本;在 ldpi 中,然后是 ldpi 版本。

      2. 1234563大约 1.5 倍大);同样,如果您的设备分辨率较低,那么它会缩小图像

      我想这就是发生在你身上的事情。对于 BitmapFactory,它实际上可以选择不缩放图像:

      http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html

      将 inScaled 设置为 false 即可。

      【讨论】:

      • 非常感谢。我认为类似的事情正在发生,但我确定。
      猜你喜欢
      • 1970-01-01
      • 2013-07-10
      • 2016-09-15
      • 2010-12-17
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多