在Pixmap上使用'drawPixel'时的透明度?

时间:2017-01-20 03:59:14

标签: java libgdx

背景

我正在创建一个我手动布局a texture atlas的应用程序。整点是图像本身不应该是透明的 - 它具有一致的背景颜色,然后应该在代码中删除。

我遇到的问题是,我似乎无法从我正在处理的Pixmap中移除像素 - 使它们变得透明。我已确保对Pixmap Format使用RGBA_8888,这肯定会支持透明度。

问题

以下是我遇到问题的代码:

pixmap.drawPixel(x, y, 0x00000000);

很明显,0x00000000将为零 - 即使从十六进制转换为基数十 - 严重,它是相同的数字!

根据我的观察,我注意到drawPixel方法将一个像素绘制到当前的像素上。我想要的是让它变得透明。使用上面提到的代码,它将透明度绘制到不透明的东西上 - 最终不会改变任何东西。就好像你什么都没有添加东西一样,东西仍然存在。

研究

像往常一样,我自己做了一些研究。在 Stackoverflow 上,我还没有找到任何有用的东西。我所知道的唯一事情是上面提到的事情,我通过观察Pixmap及其drawPixel方法找到了。

而且

也许有人可以指出我如何制作Pixmap透明像素的正确方向?

1 个答案:

答案 0 :(得分:3)

正如您已经发现的那样,您无法在现有像素上绘制混合透明像素,因为您无法看到任何内容。首先,您需要禁用Pixmap混合。

Pixmap.setBlending(Pixmap.Blending.None); // before you start drawing pixels.

pixmap.drawPixel(x, y, 0x00000000);
// And all pixels you want to draw

Pixmap.setBlending(Pixmap.Blending.SourceOver); // if you want to go back to blending

如果要维护现有像素的RGB,则必须获取当前像素颜色并仅手动将alpha分量设为黑色:

pixmap.drawPixel(x, y, pixmap.getPixel(x, y) & 0xffffff00);