# Alpha wert



## Titanpharao (31. Jan 2009)

Hallo,

ich habe ein BufferedImage und möchte nur wissen, ob ein Pixel transparent ist  wie mache ich das?
schon viel probiert, aber ich finde keine methode wo ich einfach fragen kann isAlpha(x,y) oder getAlpha(x,y)<255 o.ä. ..

Habe ein BufferedImage wo der Alpha Wert nicht in den Farbanteil reingerechnet ist.


----------



## 0x7F800000 (31. Jan 2009)

Titanpharao hat gesagt.:
			
		

> ich habe ein BufferedImage und möchte nur wissen, ob ein Pixel transparent ist  wie mache ich das?
> schon viel probiert, aber ich finde keine methode wo ich einfach fragen kann isAlpha(x,y) oder getAlpha(x,y)<255 o.ä. ..


im ersten byte des integers, der von BufferedImage.getRGB(int x, int y) zurückgeliefert wird, ist auch der alpha-wert mit drin.


> Habe ein BufferedImage wo der Alpha Wert nicht in den Farbanteil reingerechnet ist.


Dann ist es doch recht sinnfrei, nach einem Alpha-Wert zu fragen. Was willst du denn da rausbekommen, wenn du schon weißt, dass das Bild keine transparenten Stellen hat, und für alpha überall 0xFF zurückliefert?


----------



## Titanpharao (31. Jan 2009)

img.isAlphaPremultiplied() <- gibt mir false zurück, soweit ich das gelesen habe wirds also nicht im Farbkanal abgespeichert. Ok das erste byte und wie finde ich nun herraus obs alpha ist? Weil kann ja über ein Color Objekt mir .getAlpha sagen aber ist immer 255


----------



## 0x7F800000 (31. Jan 2009)

Titanpharao hat gesagt.:
			
		

> Weil kann ja über ein Color Objekt mir .getAlpha sagen aber ist immer 255


wie gesagt, ich verstehe nicht ganz, was du erwartest: wenn im bild kein alphakanal vorhanden ist, dann sind doch alle alpha-werte automatisch auf 255, was soll denn da anderes rauskommen? ???:L


----------



## Titanpharao (31. Jan 2009)

public static final int TYPE_4BYTE_ABGR
BGR-Bild mit Alpha-Werten, die nicht in die Farbanteile eingerechnet sind. Jeder Anteil wird mit jeweils einem Byte dargestellt, die Reihenfolge ist Alpha, Blau, Grün und Rot.


----------



## Quaxli (31. Jan 2009)

Hier mal ein Stück Code, das ich mir mal gebastelt habe:




```
protected boolean isOpaque(int rgb) {

    int alpha = (rgb >> 24) & 0xff;  
    //red   = (rgb >> 16) & 0xff;  
    //green = (rgb >>  8) & 0xff;  
    //blue  = (rgb ) & 0xff;  
    
    if(alpha==0){
      return false;
    }

    return true;
    
  }
```

Übergeben wird  der Integer-Wert, den man bei einem BufferedImage für getRGB(x,y) zurück bekommt.
Zu beachten ist: die Methode heißt isOpaque(..) - also das genaue Gegenteil von Transparent


----------



## Titanpharao (31. Jan 2009)

Das selbe steht auch bei Color.getAlpha sozusagen. Aber irgendwie isses dennoch nicht da. Ach egal, habe einfach das Bild zeichnen wieder aus der paintComponent Methode rausgenommen.

Wollte halt son setEnable nachbilden (sah übringst cool aus^^)

```
for(int x=0;x<img.getWidth();++x){
for(int y=0;y<img.getHeight();++y){				
	Color color=new Color(img.getRGB(x,y));
	if(color.getAlpha()==255){
		int gray=(color.getRed()+color.getBlue()+color.getGreen())/3;
        Color c = new Color(gray,gray,gray); 
        img.setRGB(x,y, c.getRGB());
	}
}
}
```


----------

