android - 尽管正确显示为白色,但图像并未完全显示为白色

标签 android colors rgb

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

ImageView graphic shows now white background despite the image uses white

我将其作为框架布局中的单个 View 添加到 Activity 中:

<?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 的问题,但找不到合适的解决方案。

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

最佳答案

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

您提到的 RGB888 格式是对的。问题的原因在于,无论 APK 文件中的原始位图格式如何,所有位图都被压缩(在我的例子中为索引 256 色!wtf?)。

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

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

1) Per-bitmap:比如说,我们有一个名为 @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 位颜色深度,但我不知道如何控制编译时图像压缩。

关于android - 尽管正确显示为白色,但图像并未完全显示为白色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10485410/

相关文章:

android - onSaveInstanceState 在 onDestroyView 之后调用

android - Appium - 减少测试之间的加载时间

java - java中的图像操作

c++ - 如何从 HBITMAP 获取 RGBQUAD?

C:将 RGB 值的结构写入文件以创建 ppm 图像 - 文件过早结束

android - 权限被拒绝(缺少互联网权限)

java - Android RecyclerView添加和删除项目

我可以轻松地更改从 C 程序输出到 Windows 控制台的文本颜色吗

silverlight - 使用模板绑定(bind)设置​​边框背景

Python Matplotlib 箱线图颜色