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

D. *_*aro 5 java libgdx

背景

\n

我正在创建一个应用程序,在其中手动布置纹理图集。重点是图像本身\xe2\x80\x99不应该是透明的\xe2\x80\x94它具有一致的背景颜色,然后应该在代码中将其删除。

\n

我\xe2\x80\x99m 遇到的问题是我可以\xe2\x80\x99t 似乎能够从I\xe2\x80\x99m 工作中删除像素\xe2\x80\x94使它们透明\xe2\x80\ Pixmapx94在。I\xe2\x80\x99ve 确保用于RGBA_8888我的Pixmap\xe2\x80\x99s Format,它肯定支持透明度。

\n

问题

\n

Here\xe2\x80\x99s 是我遇到问题的代码片段:

\n
pixmap.drawPixel(x, y, 0x00000000);\n
Run Code Online (Sandbox Code Playgroud)\n

很明显,0x00000000即使从十六进制转换为基数十\xe2\x80\x94,也将为零\xe2\x80\x94,说实话,它\xe2\x80\x99是相同的数字!

\n

根据我的观察,我\xe2\x80\x99注意到该drawPixel方法在当前像素上绘制一个像素。我想要的是让它变得透明。使用上述代码段,它将透明度绘制到不透明的\xe2\x80\x99t透明\xe2\x80\x94的东西上,最终什么也没改变。就好像你什么都不添加到某物上,某物仍然存在。

\n

研究

\n

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

\n

而且

\n

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

\n

Ten*_*r04 6

正如您已经发现的,您无法在现有像素上绘制混合透明像素,因为您看不到任何东西。因此,首先您需要禁用像素图混合。

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
Run Code Online (Sandbox Code Playgroud)

如果你想保持现有像素的 RGB,你必须获取当前像素颜色并手动仅将 alpha 分量涂黑:

pixmap.drawPixel(x, y, pixmap.getPixel(x, y) & 0xffffff00);
Run Code Online (Sandbox Code Playgroud)