【问题标题】:Android 2.2 distorts picture colors?Android 2.2 扭曲图片颜色?
【发布时间】:2011-07-23 22:52:35
【问题描述】:

我的应用中有一些 .png 文件。我需要在运行时加载这些,并从中获取某些像素的确切颜色。重要的是,我不想缩放这些图片。我不会直接在 UI 上显示它们,它们用作地图。

现在,在 Android 1.5 上,这没有问题。我将这些图像放在“/res/drawable”目录中,使用 BitmapFactory 将它们加载到 Bitmap 对象中,并使用它来获取所需像素的颜色。例如。像素 (100, 50) 的颜色为 RGB(100, 1, 100)。

在 Android 2.2 上,相同的过程会产生不同的颜色(对于相同的像素),所以我得到 RGB(99, 3, 102) / RGB(101, 2, 99) / etc. 对于相同的 (100, 50)像素。我检查了 Bitmap 对象的分辨率,似乎没有被缩放。

谁能解释一下,为什么我的颜色值会失真?

【问题讨论】:

    标签: android image png


    【解决方案1】:

    已解决:看来,在 Android 2.2 上,我必须设置正确的位图配置。不知何故,低于 2.2 的版本设法做到了这一点(或者可能支持的配置较少,系统猜对了配置,不知道)。

    无论如何,这是我现在使用的代码:

    BitmapFactory.Options opt = new BitmapFactory.Options();
            opt.inDither=false;
            opt.inPreferredConfig = Bitmap.Config.ARGB_8888;
            Bitmap mask = BitmapFactory.decodeResource(getResources(), R.drawable.picture, opt);
    

    【讨论】:

      【解决方案2】:

      去为自己制作一个与所讨论的像素颜色完全相同的位图。使此位图的大小与您当前使用的分辨率相同。加载它并检查您遇到问题的同一像素(或任何像素)的 RGB 值。

      这应该告诉您您的问题是缩放问题(我认为是这样),还是可能是颜色转换中的问题。

      【讨论】:

      • 我做到了,创建了一个相同大小的位图,并用颜色(100、22、100)填充它,加载它,并尝试获取不同像素的颜色值。我得到了不同的颜色(都接近给定的颜色),即使整个图片都充满了纯色......我在这里错过了什么?
      【解决方案3】:

      如果您没有快速找到答案,我的实用主义者会问自己解析 .png 有多难,以获得独立于平台任何变化的完全确定的结果。

      【讨论】:

      • 没错,但我认为这样一个现代框架能够加载该死的 .png 是一个合理的期望。
      • 嗯,它可以——但希望将其原样加载以用作数据可能与框架实现者明显希望支持最佳视觉显示(可能包括抖动或反别名或谁知道)。不过,很高兴您找到了一种使用平台功能的方法。
      【解决方案4】:

      我的 2.3 设备(Nexus One 和 S)在没有设置“opt.inPreferredConfig”的情况下运行良好,但似乎 2.2 需要它才能获得准确的 RGB。

      【讨论】:

        猜你喜欢
        • 2017-12-02
        • 2018-09-24
        • 2018-11-10
        • 1970-01-01
        • 1970-01-01
        • 2013-07-26
        • 2020-12-30
        • 2017-02-11
        • 2019-03-14
        相关资源
        最近更新 更多