BufferedImage einzelne Pixel transparent machen V2.0

Arn

Mitglied
Hallo zusammen.

Ich habe ein Problem:
Ich habe einen Farb-Filter der die farbigen Pixel eines Bildes in eine andere Farbe umfärbt. der funktioniert toll, bis auf eine Kleinigkeit: die nicht völlig transparenten Pixel bekommen nach dem filtern eine transparenz von 255. die Methode zum Übernehmen der Transparenz sieht so aus:

Java:
 for (int x = 0; x < image.getWidth(); x++)
        {
           for (int y = 0; y < image.getHeight(); y++)
           {
 
            Color c = new Color(image.getRGB(x, y));
           if(c.getAlpha() >= 0){
            if((int)(c.getGreen()/2)==(int)(c.getBlue()2)&&(int)(c.getGreen()/2)==(int)(c.getRed()/2))
            {
            
            }
            else
            {
                
                    
                    //hier Code vom Filter     
                   
                    
                    System.out.println(c.getAlpha());
                    Color newcolor=new Color(newR,newG,newB,c.getAlpha());
                    image.setRGB(x, y, newcolor.getRGB());
            }   
           }
         }
        }

bei dem Outprint kommt immer 255 raus. wir hatten diesen Fehler schon einmal in diesem Forum. das Problem wurde damals gelöst indem sich heraus stellte das der Nutzer ein Bild benutzte das den Alpha-Kanal nicht unterstützte, das ist bei mir aber nicht der fall da das verarbeitete Bild vorher transparenzen hatte.

Vielen dank für alle Antworten.
 
Hallo,

das Problem hatte ich auch schon mal, die Alpha-Werte sind manchmal nicht bei den RGB-Werten, sondern im "AlphaRaster" gespeichert.

So kann man die Alpha-Werte erhalten:
Java:
private void setRGBWithOldAlpha(BufferedImage bi, int x, int y, Color c) {
    if (bi.getAlphaRaster() != null) {
        int a = bi.getAlphaRaster().getSample(x, y, 0);
        bi.setRGB(x, y, c.getRGB());
        bi.getAlphaRaster().setSample(x, y, 0, a);
    } else {
        bi.setRGB(x, y, c.getRGB());
    }
}

Gruß javaDev2011
 

Zurück
Oben