Alpha wert

Status
Nicht offen für weitere Antworten.

Titanpharao

Bekanntes Mitglied
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

Top Contributor
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

Bekanntes Mitglied
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

Top Contributor
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

Bekanntes Mitglied
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

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



Code:
  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

Bekanntes Mitglied
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^^)
Code:
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());
	}
}
}
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben