gpt4 book ai didi

java - 用颜色填充图像的不透明部分

转载 作者:行者123 更新时间:2023-11-30 01:17:39 30 4
gpt4 key购买 nike

我在 Libgdx 中有一项任务: 更改图像的颜色,例如三角形、星形、心形和其他形状。所有形状均以透明背景的 png 格式给出。

我正在使用 Pixmap 执行此操作,检查每个像素是否为具有所需颜色的不透明填充像素。这是代码:

      for (int y = 0; y < pixmap.getHeight(); y++) {
for (int x = 0; x < pixmap.getWidth(); x++) {
Color color = new Color();

Color.rgba8888ToColor(color, pixmap.getPixel(x, y));

if(color.r != 1 || color.b != 1 && color.g != 1){
pixmap.setColor(setColor);
pixmap.fillRectangle(x, y, 1, 1);
}
}
}

还有其他方法吗?因为下面的方法工作时间太长。

最佳答案

您当然可以加快执行速度,因为现在对于图像中的每个像素,您正在实例化一个新的 Color 对象并将像素分量转换为单独的 float 。然后 GC 将不得不花时间清除您生成的所有这些 Color 对象。那些额外的中间步骤是不必要的。

此外,您只需调用一次pixmap.setColor(尽管这很简单)。您可以使用 drawPixel 而不是 fillRectangle 来更有效地绘制单个像素。

static final int R = 0xFF000000;
static final int G = 0x00FF0000;
static final int B = 0x0000FF00;

pixmap.setColor(setColor);
for (int y = 0; y < pixmap.getHeight(); y++) {
for (int x = 0; x < pixmap.getWidth(); x++) {
int pixel = pixmap.getPixel(x, y);

if((pixel & R) != R || (pixel & B) != B && (pixel & G) != G){
pixmap.drawPixel(x, y);
}
}
}

(顺便说一句,您是要检查红色蓝色绿色吗?这似乎是奇怪的标准,除非您只想在原始颜色是纯黄色、青色或白色。)

如果您只是将图像绘制为纹理,则无需像这样在 Pixmap 上进行操作。例如,您可以将源图像设为白色并在使用 SpriteBatch 绘制图像时对其进行着色,这不会影响性能。

关于java - 用颜色填充图像的不透明部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37590314/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com