2011-09-28 59 views
6

我使用抗鋸齒來使我的圖像更流暢。在使用抗鋸齒功能時,圖像周圍會出現黑邊。發生這種情況是因爲Android使用黑色並將其與圖像中的黃色混合。 這是一個gernal問題!當我繪製一個矩形並將alpha值設置爲127時,圖像也變得安靜黑暗。而不是使用黑色Android應該使用白色來繪製透明度。一般的Android半透明問題

有沒有解決辦法,我可以如何處理這個問題?

用於將半透明矩形繪製到畫布的示例源代碼。矩形也很暗,但它應該很亮。

Bitmap bmp = Bitmap.createBitmap(200, 200, Config.ARGB_8888); 
Canvas canvas = new Canvas(bmp); 
Paint rPaint = new Paint(); 
rPaint.setColor(Color.parseColor("#F7E836")); 
rPaint.setAlpha(127); 
rPaint.setStyle(Paint.Style.FILL); 
canvas.drawRect(0, 0, 100, 100, rPaint); 

的圖片,是指呈現與下列庫SVG圖形: http://code.google.com/p/svg-android/

我想我找到的bug。問題是SurfaceView。它的背景是黑色的。當我使用上面的代碼並將其顯示在ImageView上並且ImageView後面的UI元素的背景顏色爲黑色時,會發生同樣的半透明錯誤。 SurfaceView的背景顏色始終爲黑色。如果我使用setBackgroundColor將其更改爲白色,則SurfaceView將變爲白色,但白色背景將在我用OpenGL繪製的所有其他圖像上繪製。我認爲這些必須切換。首先應該繪製背景顏色,而不是OpenGL的東西。

回答

2

發佈鏈接到原始源圖像,並顯示他們如何反鋸齒他們(代碼)。

當圖像是反鋸齒時,算法會在組成邊緣的顏色之間插入顏色。因此,對於黃色星形圖像,如果背景爲白色,則會嘗試在黃色和白色(較淺的黃色)之間的邊緣周圍添加像素。這是「平滑」圖像。

但是,如果圖像具有索引顏色空間,那麼在圖像托盤中可能不存在較淺的黃色陰影,因此,您可以在其位置獲得幾乎任何其他顏色,無論索引中的顏色根據所計算的指標值登陸。

您的問題中的圖像是一個索引PNG,因此有這個問題。

如果這是問題,那麼您需要將原始源圖像轉換爲非索引顏色空間,或者在索引圖像之前對它們進行反鋸齒處理,如果圖像需要縮放通過你的應用程序,或者如果你需要針對各種不同背景的反別名。

另一件可能發生的事情是,你的反鋸齒針對的背景不同於你認爲的自己,特別是如果背景是黑色的,那麼黃星正確地反鋸齒,發佈你的代碼是最簡單的方法想出解決辦法。

+0

圖像是使用上面鏈接的庫呈現的SVG圖形。背景從未改變。它保持白色。 –

+0

只是爲了理解原因:問題在於,SVG是用「硬邊緣」繪製的。通常算法會在edgecolor和背景顏色之間找到一個顏色,但在這個例子中沒有背景顏色,因爲svg是單獨渲染的。結果將使用任何顏色。是對的嗎? –

+0

你是如何渲染SVG的?你是填充ImageViews還是將它們作爲圖片抓取並繪製到Canvas? – Mark