白色不是白色

问题描述

| 在Android中处理某些位图时,我注意到视图中使用的白色并不总是与位图上呈现的白色相同。考虑此屏幕截图。 背景白色是从具有白色背景颜色的角度来看的。 前景\“ white \”来自从SD卡解码的白色位图,显示在ImageView中。该位图使用ѭ0进行解码,如下所示:
BitmapFactory.Options resample = new BitmapFactory.Options();
resample.inPreferredConfig = Config.RGB_565;
resample.inSampleSize = sampleSize;
return BitmapFactory.decodeFile(filePath,resample);
供参考,这是位图。 为什么会这样,如何解决?     

解决方法

我遇到了同样的问题,经过一些实验,我注意到注释comment2解决了这个问题。大于3的33ѭ的任何值都将显示此效果(删除
<uses-sdk>
标记会将
minSdkVersion
更改为1。     ,尝试在onCreate中设置
getWindow().setFormat(PixelFormat.RGB_565)
。 默认格式似乎会根据SDK版本和设备类型而更改,因此只需强制将其保持在RGB_565     ,发生了非常相似的问题,即使将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。     ,图像类型和ImageView呈现在其上的位图之间可能有所不同,请参见Bitmap.Config。以不同的模式加载图像,看看是否有帮助。看一下位图的质量和条带以获取更多信息。     ,这是为我解决的问题: 您需要设置屏幕密度,以防止位图工厂重新缩放位图。这是通过以下代码完成的:
DisplayMetrics displayMetrics=new DisplayMetrics();
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
wm.getDefaultDisplay().getMetrics(displayMetrics);
resample.inScreenDensity = displayMetrics.densityDpi;