Moin zusammen,
um drei sich in der bekannten Manier überschneidende Kreise eines Farbsterns zu zeichnen, die an den Überschneidungsstellen die additiven Farbwerte zeigen, habe ich drei ARGB-BufferedImages erzeugt, auf die ich drei Kreise in rot, grün und blau per fillOval() zeichne und diese dann per JAI.AddDescriptor kombiniere. Bei der genannten Methode
funktioniert jedoch die Addition nicht und die Farben überdecken sich
vollständig anstatt sich zu mischen.
Führe ich das Ganze jedoch mit extern per Gimp erstellten *.png-Bildern durch klappt's prima.
Wie erreiche ich die Farbaddition über die BufferedImages?
Hier die relevanten Codeteile
Danke und Gruß Jörg
um drei sich in der bekannten Manier überschneidende Kreise eines Farbsterns zu zeichnen, die an den Überschneidungsstellen die additiven Farbwerte zeigen, habe ich drei ARGB-BufferedImages erzeugt, auf die ich drei Kreise in rot, grün und blau per fillOval() zeichne und diese dann per JAI.AddDescriptor kombiniere. Bei der genannten Methode
funktioniert jedoch die Addition nicht und die Farben überdecken sich
vollständig anstatt sich zu mischen.
Führe ich das Ganze jedoch mit extern per Gimp erstellten *.png-Bildern durch klappt's prima.
Wie erreiche ich die Farbaddition über die BufferedImages?
Hier die relevanten Codeteile
Code:
[...]
initImages();
ParameterBlock pb = new ParameterBlock();
pb.addSource(sourceImage1);
pb.addSource(sourceImage2);
//pb.add(RenderingHints.KEY_ALPHA_INTERPOLATION);
ergebnis = JAI.create("add", pb);
ParameterBlock pb2 = new ParameterBlock();
pb2.addSource(ergebnis);
pb2.addSource(sourceImage3);
//pb2.add(RenderingHints.KEY_ALPHA_INTERPOLATION);
endErgebnis = JAI.create("add", pb2);
DisplayJAI dj = new DisplayJAI(endErgebnis);
this.add(dj);
[...]
// Images erstellen
private void initImages() {
buff1 = new BufferedImage(400, 400, BufferedImage.TYPE_INT_ARGB);
buff2 = new BufferedImage(400, 400, BufferedImage.TYPE_INT_ARGB);
buff3 = new BufferedImage(400, 400, BufferedImage.TYPE_INT_ARGB);
Graphics g1 = buff1.getGraphics();
g1.setColor(Color.RED);
g1.fillOval(100, 0, 200, 200);
Graphics g2 = buff2.getGraphics();
g1.setColor(Color.GREEN);
g1.fillOval(40, 120, 200, 200);
Graphics g3 = buff3.getGraphics();
g1.setColor(Color.BLUE);
g1.fillOval(160, 120, 200, 200);
// SourceImages erstellen
sourceImage1 = PlanarImage.wrapRenderedImage(buff1);
sourceImage2 = PlanarImage.wrapRenderedImage(buff2);
sourceImage3 = PlanarImage.wrapRenderedImage(buff3);
}
Danke und Gruß Jörg