I ran into the same problem for creating weapons with random colors using the same texture.
So I wrote this.
Basically I create a pixmap texture that you want to edit.
Then you iterate over all the pixels, iterations I check for specific colors that are part of a specific part of the texture. (I suggest using different shades of gray, since RGB is the same)
Then, when it is on the pixel where you want to change the color, I get the color for these groups of pixels using a color selection method that is mostly random, which gets the color from a pre-packaged array of colors,
and then changes that particular pixel to a new color.
private static Texture genTexture(String texturename, int colorBlade, int colorEdge, int colorAffinity, int colorGrip, int colorExtra) { Texture tex = Game.res.getTexture(texturename); TextureData textureData = tex.getTextureData(); textureData.prepare(); Color tintBlade = chooseColor(mainColors); Color tintEdge = new Color(tintBlade.r + 0.1f, tintBlade.g + 0.1f, tintBlade.b + 0.1f, 1); Color tintAffinity = chooseColor(affinityColors); Color tintGrip; Color tintExtra = chooseColor(extraColors); boolean colorsAreSet = false; do { tintGrip = chooseColor(mainColors); if (tintAffinity != tintBlade && tintAffinity != tintGrip && tintGrip != tintBlade) { colorsAreSet = true; } } while (!colorsAreSet); Pixmap pixmap = tex.getTextureData().consumePixmap(); 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)); int colorInt[] = getColorFromHex(color); if (colorInt[0] == colorBlade && colorInt[1] == colorBlade && colorInt[2] == colorBlade) { pixmap.setColor(tintBlade); pixmap.fillRectangle(x, y, 1, 1); } else if (colorInt[0] == colorEdge && colorInt[1] == colorEdge && colorInt[2] == colorEdge) { pixmap.setColor(tintEdge); pixmap.fillRectangle(x, y, 1, 1); } else if (colorInt[0] == colorAffinity && colorInt[1] == colorAffinity && colorInt[2] == colorAffinity) { pixmap.setColor(tintAffinity); pixmap.fillRectangle(x, y, 1, 1); } else if (colorInt[0] == colorGrip && colorInt[1] == colorGrip && colorInt[2] == colorGrip) { pixmap.setColor(tintGrip); pixmap.fillRectangle(x, y, 1, 1); } else if (colorInt[0] == colorExtra && colorInt[1] == colorExtra && colorInt[2] == colorExtra) { pixmap.setColor(tintExtra); pixmap.fillRectangle(x, y, 1, 1); } } } tex = new Texture(pixmap); textureData.disposePixmap(); pixmap.dispose(); return tex; }
Hope this helps. Please do not just copy the paste, try rebuilding it according to your needs or you wonโt know anything.
Rose blax
source share