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

时间:2012-05-07 16:12:10

标签: android colors rgb

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

ImageView graphic shows now white background despite the image uses white

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

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

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

6 个答案:

答案 0 :(得分:9)

这真烦人。我想知道,为什么很少有人遇到这个问题,因为它应该出现在所有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)对于整个活动:在活动onCreate方法中我们需要添加

getWindow().setFormat(PixelFormat.RGB_565);

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

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

答案 1 :(得分: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);

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

在使用Stackoverflow中的所有解决方案之后。 从将android:src更改为app:srcCompact以及许多其他解决方案。 帮助我的是,我的图像位于 drawable-anydpi 内部,并且将图像从 drawable-anydpi 移至了 drawable ,它对我有用经过2个小时的研究。

P.S:这也可能对某人有所帮助,这就是为什么我将其放在这里。 :)

答案 4 :(得分:-1)

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

android:scaleType="centerCrop"

它会在左右两侧裁剪你图片的某些部分,但会使用整个屏幕......

答案 5 :(得分:-1)

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

机器人:背景= “#F8FCF8”