2011-03-22 217 views
9

在处理Android中的一些位图时,我注意到在视图中使用的白色并不总是与位图上的白色相同。考虑这个截图。白色不是白色

enter image description here

背景白是从与白色的背景颜色的图。

前景“白色”来自SD卡解码的白色位图,显示在ImageView中。此位图进行解码,使用RGB_565如下:

BitmapFactory.Options resample = new BitmapFactory.Options(); 
resample.inPreferredConfig = Config.RGB_565; 
resample.inSampleSize = sampleSize; 
return BitmapFactory.decodeFile(filePath, resample); 

作为参考,here的位图。

为什么会这样以及如何修复?

+1

什么是必要的白色位图?可以使用一堆空行:P – Marlon 2011-03-22 19:12:49

+1

但是:那么为什么这么长时间,或者为什么不只是一个链接呢? – Arjan 2011-03-22 19:27:51

+0

链接到位图,而不是将其附加到问题。 – hpique 2011-03-22 19:35:36

回答

0

它可能是图像类型和ImageView呈现的位图之间的差异,请参阅Bitmap.Config。以不同的模式加载你的图像,看看是否有帮助。看看Bitmap quality and banding了解更多信息。

+0

你能再细说一下吗?我添加了我正在使用的Bitmap.Config(RGB_565)。 – hpique 2011-03-23 09:52:05

+0

尝试设置窗口和图像以使用相同的RGB模式,看看会发生什么。使用getWindow()。getAttributes().format格式设置图像的上方和窗口。试试RGB_8888,看看它是不是白色。你知道你的原始图像在RGB格式吗? – 2011-03-23 13:28:53

+0

不能。我如何检查图像的RGB格式(在问题中链接)?根据Mac OS X预览,我知道它是RGB,深度是8。 – hpique 2011-03-23 14:15:42

3

我有同样的问题,并经过一些实验后,我注意到,评论<uses-sdk>解决了这个问题。上述3 android:minSdkVersion的任何值将使这种效应出现(除去<uses-sdk>标签有效地改变minSdkVersion为1

+0

不幸的是,这并没有为我工作。 – radhoo 2011-10-02 11:00:30

+0

这适用于我,但这会破坏平板电脑布局 – VicVu 2012-09-11 19:56:32

1

有一个非常类似的,如果不完全相同的问题,甚至设置inPreferredConfig到ARGB_8888没有帮助。

从我可以从中收集到:http://android.nakatome.net/2010/04/bitmap-basics.html

问题是Android会自动将24位图像抖动到16位,这可能会混淆颜色,链接提到您可以通过为图像添加Alpha通道来禁用此功能,或者从原始目录加载而不是作为资源。

视为这些都不是我的选择,我发现终于研究出以下:

Paint ditherPaint = new Paint(); 
ditherPaint.setDither(true); 
canvas.drawBitmap(mDrawable.getBitmap(), null, 
        mDrawable.getBounds(), ditherPaint); 

这里mDrawable的类型是BitmapDrawable的。

0

这里就是解决了这个对我来说:

您需要设置屏幕密度,以防止位从工厂重新调整你的位图。这是用以下代码完成的:

DisplayMetrics displayMetrics=new DisplayMetrics(); 
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 
wm.getDefaultDisplay().getMetrics(displayMetrics); 
resample.inScreenDensity = displayMetrics.densityDpi; 
+0

什么是选项? – VicVu 2012-09-11 19:54:35

+1

对不起,这应该在原始问题中重新采样。它是BitmapFactory.Options的一个实例,然后它被用作BitmapFactory.decode * - 方法的参数。 – ChristophK 2012-09-24 09:09:17

2

尝试在您的onCreate中设置getWindow().setFormat(PixelFormat.RGB_565)

的默认格式似乎改变基于SDK版本和设备类型,所以才迫使它留在RGB_565