我想提请你注意以下图片
首先是原始图像
然后如何在屏幕上呈现
正如你在原版上看到的一切都很漂亮和黄色,边缘有一点点透明度,看起来很光滑。
但是当我渲染时,我会出现一些变暗的像素。
为了避免我得到的通常答案
我用
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而不是我设置的颜色。这是Bitmap的问题还是我创建图像的方式?
// 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();
答案 0 :(得分:2)
图片的背景颜色是什么?即删除alpha通道时的样子是什么?我猜 - 它是黑色的?尝试给背景颜色与徽标颜色相同(即淡黄色),然后再试一次。
编辑:也可以根据评论编辑答案。即使你正确设置了周围像素的RGB颜色,一些图像压缩格式仍然可以“优化”它并将所有完全透明的像素转换为(0,0,0,0),这将导致你在使用时描述的问题双线性过滤。尝试使用不同的文件格式,或者进行研究以查看是否可以在特定压缩中关闭此功能,或者考虑在加载后在代码中修复图像。
答案 1 :(得分:1)
您的图片可能有预乘的Alpha值。尝试使用gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
有关详细信息,请参阅this post。