# Die Transparente Color



## Developer_X (8. Okt 2010)

Hi, ich habe eine Frage, wie kann ich eine farbe (Color) transparent machen?

Ich habe ein BufferedImage m,
und will mit folgendem Algorhythmus alle Pixel die die Farbe c haben, transparent machen, welchen Color wert muss ich dann nehmen?


```
for(int x = 0;x<m.getWidth();x++)
					{
						for(int y = 0;y<m.getHeight();y++)
						{
							if(new Color(m.getRGB(x, y)).equals(c))
							{
								m.setRGB(x, y, new Color(0,0,0).getRGB()); // Welchen Farbwert muss ich hier einsetzen?
							}
						}
						jpb.setValue((int) (100.0/x *x));
					}
```

Danke für eure Hilfen, Developer_X


----------



## Marco13 (8. Okt 2010)

new Color(0,0,0*,0*).getRGB()
oder besser gleich
0

Trotzdem wird das schon wegen des "new Color" in der if-Abfrage schcklich langsam werden. Zieh' das da raus.


----------



## Gastredner (8. Okt 2010)

Marco13 hat gesagt.:


> Trotzdem wird das schon wegen des "new Color" in der if-Abfrage schcklich langsam werden. Zieh' das da raus.


Stimmt, arbeite lieber mit den entsprechenden int-Werten. Die RGBA-Werte werden im BufferedImage als int-Werte gespeichert. Diese int-Werte kannst du dir über [c]getRGB(int x, int y)[/c] (oder auch einen ganzen Ausschnitt über die überladene getRGB()-Methode) geben lassen und anschließend über Bit-Operationen verarbeiten. Die 8-bittigen RGBA-Werte werden dabei in der Reihenfolge RGBA in den int kodiert. Über die Bitoperatoren << und >> kannst du dir die entsprechenden Werte im byte-Bereich besorgen:

```
int rgba;
byte red = (byte)(rgba >> 24) & 0xFF;
```
Willst du lieber direkt die Werte zwischen 0 und 255 haben, dann lässt du einfach den Cast auf byte weg.


----------



## Developer_X (8. Okt 2010)

Ich hab das geändert, bei der if-Abfrage, ihr hattet vollkommen recht.

Aber wenn ich (das ist eine PNG Datei) die Farbe ersetzen lassen durch 0,0,0,0 sprich:


```
for(int x = 0;x<m.getWidth();x++)
					{
						for(int y = 0;y<m.getHeight();y++)
						{
							if(m.getRGB(x, y)==c.getRGB())
							{
								m.setRGB(x, y, new Color(0,0,0,0).getRGB());
							}
						}
					}
```

dann wird der hintergrund nur schwarz, und nichts weiter, ich möchte aber, dass er durchsichtig wird, versteht ihr?
Transparent.
Was kann ich dagegen tun?


----------



## Schandro (8. Okt 2010)

Ist den das BufferedImage überhaupt von einem Typ der Transparenz unterstützt? (Also bspw. TYPE_IN_ARGB)

Wenn ja, kommt es natürlich drauf an wo du das BufferedImage drauf malst. Wenn du es auf einen Schwarzen hintergrund malst, ist es ja logisch das die transparenten Stellen schwarz angezeigt werden.....


----------



## Developer_X (8. Okt 2010)

Ich male es nirgendwo drauf, sondern ich lade ein Bild in das BufferedImage, mit getRGB und setRGB ändere ich die Pixelfarben, und dann speichere ich es gleich wieder ab.


----------



## Developer_X (8. Okt 2010)

Ich lade es so ein:

```
try
		{
			m = ImageIO.read(new File(s));
		}
		catch(Exception e)
		{
		}
```

Wie kann ich das was du gesagt hast einbauen?


----------



## Developer_X (8. Okt 2010)

kann mir den keiner helfen?!

Bitte helft mir, m.f.G. Developer_X


----------



## LoR (9. Okt 2010)

RGBImageFilter (Java Platform SE 6)

Bildfilter in Java nutzen | tutego


----------

