我正在创建一个应用程序,在其中手动布置纹理图集。重点是图像本身\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,它肯定支持透明度。
Here\xe2\x80\x99s 是我遇到问题的代码片段:
\npixmap.drawPixel(x, y, 0x00000000);\nRun Code Online (Sandbox Code Playgroud)\n很明显,0x00000000即使从十六进制转换为基数十\xe2\x80\x94,也将为零\xe2\x80\x94,说实话,它\xe2\x80\x99是相同的数字!
根据我的观察,我\xe2\x80\x99注意到该drawPixel方法在当前像素上绘制一个像素。我想要的是让它变得透明。使用上述代码段,它将透明度绘制到不透明的\xe2\x80\x99t透明\xe2\x80\x94的东西上,最终什么也没改变。就好像你什么都不添加到某物上,某物仍然存在。
像往常一样,我自己做了一些研究。在Stackoverflow上我还没有\xe2\x80\x99t 找到任何有用的东西。我唯一知道的是上面提到的事情,我\xe2\x80\x99ve通过观察Pixmap及其drawPixel方法设法找到了答案。
也许有人可以指出正确的方向,告诉我如何制作透明像素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
Run Code Online (Sandbox Code Playgroud)
如果你想保持现有像素的 RGB,你必须获取当前像素颜色并手动仅将 alpha 分量涂黑:
pixmap.drawPixel(x, y, pixmap.getPixel(x, y) & 0xffffff00);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
644 次 |
| 最近记录: |