2011-03-22 98 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