【问题标题】:Image does not show completely white despite it's correctly white尽管图像是正确的白色,但图像并未完全显示为白色
【发布时间】:2012-05-16 03:46:39
【问题描述】:

对于启动画面,我使用包含白色背景的图像(纯白色 - 在 Photoshop 中检查)。由于某种原因,它显示了一个轻微的绿色背景与活动的默认白色背景 - 如屏幕截图中标记的那样。仅在某些设备中,例如

我将此作为框架布局中的单个视图添加到活动中:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

<ImageView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scaleType="fitCenter"
    android:src="@drawable/splashscreen" />

</FrameLayout>

有什么想法吗?我阅读了有关 RGB888 与 RGB565 的问题,但找不到合适的解决方案。

注意:我当然可以将图像中的白色更改为透明,但更愿意了解问题并找到合适的解决方案。

【问题讨论】:

    标签: android colors rgb


    【解决方案1】:

    这真的很烦人。我想知道为什么很少有人遇到这个问题,因为它应该出现在所有 32 位显示器上。

    您对 RGB888 格式的说法是正确的。问题的原因是无论 APK 文件中的原始位图格式如何,所有位图都被压缩(在我的情况下为索引 256 色!wtf?)。

    我找不到阻止它的方法,所以如果有人知道正确的解决方案,请告诉。

    但是,我找到了两种解决白色问题的方法。

    1) 每位图: 假设我们有一个名为@drawable/mypng 的可绘制位图资源,这会导致问题。我们需要添加一个额外的 XML drawable drawable/mypng_nofilter.xml

    <?xml version="1.0" encoding="utf-8"?>
    <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/mypng"
        android:filter="false"
    />
    

    改用@drawable/mypng_nofilter

    2)对于整个activity:在activity的onCreate方法中我们需要添加

    getWindow().setFormat(PixelFormat.RGB_565);
    

    现在窗口的颜色深度为 16 位,所有位图都显示为“正确”的白色。

    同样,我更喜欢 32 位色深,但我不知道如何控制编译时图像压缩。

    【讨论】:

      【解决方案2】:

      我已经通过将Bitmap.CompressFormat 类型更改为PNG 而不是JPEG 解决了这个问题:

      Resources res = getResources();
      Drawable drawable = res.getDrawable(R.drawable.nouv);
      Bitmap bitmap = (Bitmap)((BitmapDrawable) drawable).getBitmap();
      ByteArrayOutputStream stream = new ByteArrayOutputStream();
      bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
      

      【讨论】:

        【解决方案3】:

        我在使用网络加载的图像时遇到了同样的问题。我通过禁用位图过滤器解决了这个问题。由于我在 ICS 和更新的设备上没有问题,因此我只为 ICS 之前的设备关闭了位图过滤器。以下是我使用的代码(将网络加载的位图设置为 ImageView。)

        BitmapDrawable bitmapDrawable = new BitmapDrawable(imageView.getContext().getResources(), bitmap);
        bitmapDrawable.setFilterBitmap(false);
        imageView.setImageDrawable(bitmapDrawable);
        

        【讨论】:

          【解决方案4】:

          使用 Stackoverflow 中的所有解决方案后。 从将android:src 更改为app:srcCompact 和许多其他解决方案。 帮助我的是我的图像在 drawable-anydpi 里面,我将图像从 drawable-anydpi 移动到 drawable 并且它对我有用经过 2 小时的研究。

          P.S:它也可能对某人有帮助,这就是我把它放在这里的原因。 :)

          【讨论】:

            【解决方案5】:

            由于您的图像中间只有一张图片,我建议您设置:

            android:scaleType="centerCrop"
            

            它会裁剪图片的左右部分,但会使用整个屏幕...

            【讨论】:

              【解决方案6】:

              您还可以使用图片的颜色(似乎是 F8FCF8)为 FrameLayout 或 ImageView 定义背景:

              android:background="#F8FCF8"

              【讨论】:

              • 如前所述,使用的图像确实具有纯#FFFFFF 背景。当 Android 添加图像时会生成绿色背景 - 然后在屏幕截图中可见。
              • 嗯...这很奇怪。我从来没有见过。那么也许尝试第一个解决方案?
              • 不是一个选项,不能裁剪,因为它填充了下部(上面的例子是为了演示而切割的)。
              猜你喜欢
              • 2014-04-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多