3

我想提请您注意以下图片

首先是原图

替代文字

那么它是如何在屏幕上呈现的

替代文字

正如你在原版上看到的那样,一切都很好,呈黄色,边缘有轻微的透明度,看起来很光滑。

但是当我渲染时,会出现一些变暗的像素。

为了避免我得到的通常答案

我用

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();
4

2 回答 2

2

您的图像的背景颜色是什么?即,当您移除 Alpha 通道时会是什么样子?我猜 - 它是黑色的?尝试将背景颜色设置为与您的徽标相同的颜色(即淡黄色),然后重试。

编辑:也可以根据评论编辑答案。即使您正确设置了周围像素的 RGB 颜色,某些图像压缩格式仍可能会“优化”它并将所有完全透明的像素变为(0,0,0,0),这将导致您在使用时描述的问题双线性过滤。尝试使用不同的文件格式,或者进行研究以查看是否可以在特定压缩中关闭此功能,或者考虑在加载后在代码中修复图像。

于 2010-11-30T05:26:09.663 回答
1

您的图像可能具有预乘 alpha 值。尝试使用gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);

有关更多详细信息,请参阅此帖子

于 2010-11-30T06:50:05.577 回答