Me pregunto si existe un método más eficiente para reemplazar colores en una imagen Buffered. En este momento utilizo el siguiente método:Cómo reemplazar colores en BufferedImage en JAVA
Lleno una matriz con colores para reemplazar y los colores para reemplazarlos, incluida la transparencia. Luego recorro cada píxel de la imagen. Si coincide con uno de los colores de la matriz, lo reemplazo con el nuevo color de la matriz. Aquí está el código:
Graphics2D g2;
g2 = img.createGraphics();
int x, y, i,clr,red,green,blue;
for (x = 0; x < img.getWidth(); x++) {
for (y = 0; y < img.getHeight(); y++) {
// For each pixel in the image
// get the red, green and blue value
clr = img.getRGB(x, y);
red = (clr & 0x00ff0000) >> 16;
green = (clr & 0x0000ff00) >> 8;
blue = clr & 0x000000ff;
for (i = 1; i <= Arraycounter; i++) {
// for each entry in the array
// if the red, green and blue values of the pixels match the values in the array
// replace the pixels color with the new color from the array
if (red == Red[i] && green == Green[i] && blue == Blue[i])
{
g2.setComposite(Transparency[i]);
g2.setColor(NewColor[i]);
g2.fillRect(x, y, 1, 1);
}
}
}
Las imágenes con los que trabajo son pequeñas, de 20x20 píxeles o menos. Sin embargo, parece que debe haber una forma más eficiente de hacerlo.
quizás si explicas el problema original, podríamos ayudarte más – medopal
El código crea imágenes para usarlas como leyenda en un mapa. Tenemos un conjunto de imágenes de plantilla con cuatro colores. negro, rojo, verde y azul. Dependiendo de la representación temática en el mapa, las imágenes de la plantilla deben obtener el color correcto. El negro se convertirá en el color de fondo, el rojo en el borde correcto, el verde en el patrón de hash y las áreas azules se volverán transparentes. – Rene