BufferedImage und JAI.AddDescriptor

joergel

Grünschnabel
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

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
 
Zurück