白色不是白色的

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

在这里输入图像说明

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

前景“白色”是从SD卡解码的白色位图,显示在ImageView中。 该位图使用RGB_565解码,如下所示:

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

作为参考, 这里是位图。

这是为什么呢?如何解决?

Solutions Collecting From Web of "白色不是白色的"

我有同样的问题,并经过一些实验,我注意到,评论<uses-sdk>解决了这个问题。 任何超过3的android:minSdkVersion值都会使这个效果出现(去掉<uses-sdk>标签有效地将minSdkVersion更改为1。

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

默认格式似乎基于SDK版本和设备types而改变,所以只要强制它保持在RGB_565

有一个非常相似,如果不是完全相同的问题,即使设置在ARGB_8888PreferredConfig没有帮助。

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

问题是Android会自动将24位图像抖动到16位,这可能会混淆颜色。 链接提到你可以通过为你的图片添加一个alpha通道来禁用这个function,或者从原始目录中加载它,而不是作为一个资源。

由于这些都不是我的select,我发现以下终于工作:

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

这里mDrawable的types是BitmapDrawable。

这可能是图像types和ImageView所呈现的位图之间的差异,请参阅Bitmap.Config 。 加载你的图像在不同的模式,看看是否有帮助。 看看位图质量和条带了解更多信息。

这是为我解决了这个问题:

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

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