Liebe com,
Vorneweg schon einmal: Ich habe noch keine Erfahrung mit Bildbearbeitung in Java, ich habe das meiste hier gecopied und gepasted, versucht zu verstehen und meinen Ansprüchen anzupassen! (ich weiß, dass das kein guter Stil ist, aber ich versuche es später noch zu verstehen, jetzt möchte ich einfach nicht pro Bild (und das sind eine Menge) 32 Dateien anlegen müssen
)
Ich habe in einer Datei ein Bild, welches aus einer "Bodycolor" und einer "Changecolor" besteht. Der Hintergrund ist tranzparenz (gif).
Nun möchte im Programm das Bild verändern können, also spiegeln (vertikal) und sowohl Bodycolor als auch Changecolor austauschen. Der Body kann 2 Farben annehmen und die Changecolor 8. Somit währen es 32 verschiedene Dateien, die ich Pro Bild anlegen müsste, was ich aber nicht möchte
Nun habe ich überlegt, dass das in Java ja auch irgendwie möglich sein sollte.
Das Farbenverändern mach ich mit:
BODY und CHANGE sind halt die Farben, welche den Farben im Urbild entsprechen.
hier noch das ColorReplaceLookupTable:
Es wird alles getauscht, läuft auch ohne Probleme, nur leider ist die Transparenz weg, stattdessen ist es schwarz...
So spiegel ich:
Das geht auch super, aber auch keine Transparenz (ich denke, dass das aber am Obigen liegt).
Meine Frage ist nun: Wie mache ich schwarz wieder transparent?
Ich habe gehört, dass es dazu in Java auch einen Alphachannel gibt, aber wie genau binde ich diesen ein? Ich wäre dankbar, wenn es für einen erklärt wird, der kaum Ahnung auf der Bildbearbeitung in Java hat und nicht unzuverstehende Stichworte.
Danke schon im Voraus,
mfg
BH16
Vorneweg schon einmal: Ich habe noch keine Erfahrung mit Bildbearbeitung in Java, ich habe das meiste hier gecopied und gepasted, versucht zu verstehen und meinen Ansprüchen anzupassen! (ich weiß, dass das kein guter Stil ist, aber ich versuche es später noch zu verstehen, jetzt möchte ich einfach nicht pro Bild (und das sind eine Menge) 32 Dateien anlegen müssen
Ich habe in einer Datei ein Bild, welches aus einer "Bodycolor" und einer "Changecolor" besteht. Der Hintergrund ist tranzparenz (gif).
Nun möchte im Programm das Bild verändern können, also spiegeln (vertikal) und sowohl Bodycolor als auch Changecolor austauschen. Der Body kann 2 Farben annehmen und die Changecolor 8. Somit währen es 32 verschiedene Dateien, die ich Pro Bild anlegen müsste, was ich aber nicht möchte
Nun habe ich überlegt, dass das in Java ja auch irgendwie möglich sein sollte.
Das Farbenverändern mach ich mit:
Java:
BufferedImage image = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(img, 0, 0, null);
BufferedImageOp convertOp = new LookupOp(new ColorReplaceLookupTable(BODY, Color.RED), null);
img = convertOp.filter(image, null);
image = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(img, 0, 0, null);
convertOp = new LookupOp(new ColorReplaceLookupTable(CHANGE, Color.BLUE), null);
BufferedImage convertedImage = convertOp.filter(image, null );
hier noch das ColorReplaceLookupTable:
Java:
class ColorReplaceLookupTable extends LookupTable
{
private Color srcColor;
private Color dstColor;
public ColorReplaceLookupTable(Color srcColor, Color dstColor)
{
super(0,1);
this.srcColor = srcColor;
this.dstColor = dstColor;
}
public int[] lookupPixel(int[] src, int[] dest)
{
if (src[0] == srcColor.getRed() &&
src[1] == srcColor.getGreen() &&
src[2] == srcColor.getBlue())
{
src[0] = dstColor.getRed();
src[1] = dstColor.getGreen();
src[2] = dstColor.getBlue();
}
return src;
}
}
Es wird alles getauscht, läuft auch ohne Probleme, nur leider ist die Transparenz weg, stattdessen ist es schwarz...
So spiegel ich:
Java:
convertedImage.getGraphics().drawImage(convertedImage, convertedImage.getWidth()-1, 0, -convertedImage.getWidth(), convertedImage.getHeight(), null);
Das geht auch super, aber auch keine Transparenz (ich denke, dass das aber am Obigen liegt).
Meine Frage ist nun: Wie mache ich schwarz wieder transparent?
Ich habe gehört, dass es dazu in Java auch einen Alphachannel gibt, aber wie genau binde ich diesen ein? Ich wäre dankbar, wenn es für einen erklärt wird, der kaum Ahnung auf der Bildbearbeitung in Java hat und nicht unzuverstehende Stichworte.
Danke schon im Voraus,
mfg
BH16