2010-11-30 63 views
3

我想提請你注意以下圖片上的對象邊緣的Android OpenGL ES的暗像素

首先,原始圖像

alt text

那麼它是如何在屏幕上呈現

alt text

你可以看到原來的一切都很好,黃色,ed ges有一點透明度,看起來很平滑。

但是當我渲染我有一些黑暗的像素出現。

爲了避免通常的回答我得到

我用

gl.glTexImage2D(GL10.GL_TEXTURE_2D, level, GL10.GL_RGBA, width, height, 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, pixelBuffer); 

,而不是glutil工具

gl.glEnable(GL10.GL_BLEND); 
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 

任何人有一個解決方案?

感謝

傑森


編輯

我做了一些挖掘。在原始圖像中,我的背景已經與硬幣顏色相同,並使用alpha蒙版。 我也檢查過,當我加載位圖時,似乎所有具有alpha 0的位圖都自動設置爲0,0,0,0。這可能是問題所在。


編輯 實際上它似乎是問題。我檢查了我打開的位圖的值,透明像素的值是0,0,0,0,而不是我設置的顏色。這是位圖問題還是我如何創建我的圖像?

// Load up, and flip the texture: 
      Bitmap temp = BitmapFactory.decodeResource(context.getResources(), resource, opts); 
      Bitmap bmp = Bitmap.createBitmap(temp, 0, 0, temp.getWidth(), temp.getHeight(), flip, true); 
      temp.recycle(); 

回答

2

什麼是您的圖像的背景顏色?即當您刪除Alpha通道時,它看起來是什麼樣的?我猜 - 這是黑色的?嘗試爲背景顏色設置與您的徽標相同的顏色(即淡黃色),然後重試。

編輯:也可以根據評論編輯答案。即使您正確設置了周圍像素的RGB顏色,某些圖像壓縮格式仍然可以「優化」該像素,並將所有完全透明的像素變爲(0,0,0,0),這會導致您在使用時描述的問題雙線性濾波。嘗試使用不同的文件格式,或者進行研究以查看是否可以在特定壓縮中關閉此功能,或者考慮在加載後在代碼中修復圖像。

+0

我做了一些挖掘。在原始圖像中,我的背景已經與硬幣顏色相同,並使用alpha蒙版。我也檢查過,當我加載位圖時,似乎所有具有alpha 0的位圖都自動設置爲0,0,0,0。這可能是問題所在。 – 2010-11-30 06:11:28

+1

你的文件是什麼格式?可能是壓縮的一部分 - 所有完全透明的像素都被視爲0,0,0,0,因爲在進行圖像壓縮時,雙線性過濾的問題通常不是問題。 – EboMike 2010-11-30 06:40:33

1

您的圖像可能已預先多元化alpha值。嘗試使用gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);

有關更多詳細信息,請參見this post