2010-11-30 46 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