# Bestimmte Pixel transparent erscheinen lassen



## Java Umsteiger (3. Dez 2012)

Hallo zusammen!
Ich versuche mich seit einiger Zeit in einem kleinen Aufbauspiel.
Dazu benutze ich Bilddateien, die im Hintergrund transparent sind. Da ich aber die Ressourcen nicht selber mache, ist der Hintergrund im Original Pink statt transparent. Das heißt, ich muss bei allen Bildern den Hintergrund ändern. Da das aber zu viele sind, um die einzeln zu bearbeiten, müsste ich sie entweder mit einem Programm alle "umwandeln", oder direkt mit Java alle Pixel, die Pink sind, transparent erscheinen zu lassen. Bei Delphi funktioniert das, aber als Umsteiger weiß ich nicht wie das bei Java geht. Irgendwelche Lösungsvorschläge oder Programme?

Danke schon mal im voraus!


----------



## Marco13 (3. Dez 2012)

Grundsätzlich geht sowas mit ColorConvertOp (Java Platform SE 6) . Die hat aber Nachteile: 
- Sie "from scratch" selbst zu verwenden ... hui, ist ein bißchen tricky, weil man da mit ColorModels und ColorSpaces rumhantiert, und das immer ein bißchen kompliziert ist, also ggf. websuchen nach "ColorConvertOp example" und schauen, ob davon was passt
- Sie ist recht langsam. Richtig schnell wird das Arbeiten mit BufferedImages nur, wenn man den Typ der Images genau kennt und auf die Abstraktionen verzichtet, und direkt auf den Rohdaten arbeitet (da sollte man aber wissen, was man tut). 

Sowas wie

```
int pink = Color.PINK.getRGB();
int transparent = 0;
for (int x=0; x<image.getWidth(); x++)
{
    for (int y=0; y<image.getHeight(); y++)
    {
        if (image.getRGB(x,y) == pink) image.setRGB(x,y,transparent);
    }
}
```
ist nicht das allerperformanteste, aber sehr einfach und intuitiv, und IMHO ein guter Trade-Off zwischen Performance, Abstraktion und Einfachheit


----------



## Java Umsteiger (3. Dez 2012)

> - Sie ist recht langsam. Richtig schnell wird das Arbeiten mit BufferedImages nur, wenn man den Typ der Images genau kennt und auf die Abstraktionen verzichtet, und direkt auf den Rohdaten arbeitet (da sollte man aber wissen, was man tut).


Naja, muss ja nur einmal beim Start konventiert werden und wird dann gespeichert.

Aber ich wusste gar nicht, dass 0 für transparent steht statt schwarz! 
Danke für deine schnelle Hilfe!


----------



## Java Umsteiger (3. Dez 2012)

Ähm, nee irgendwie ist 0 doch schwarz und nicht transparent, bei mir wird jetzt statt Pink scharz angezeigt. Gibt es denn irgendein anderen Farbwert für transparent?


----------



## Marco13 (3. Dez 2012)

Ist das Bild überhaupt eins, das Transparenz unterstützt? Ggf. das Bild direkt nach dem Laden mit dem Snippet aus http://www.java-forum.org/spiele-mu...18-performance-bufferedimages.html#post878295 in eins umwandeln, das Alpha (transparenz) unterstützt.


----------



## Java Umsteiger (3. Dez 2012)

Ok hat sich erledigt!
Der Typ vom BufferedImage muss TYPE_INT__*A*_RGB sein.
Danke!


----------

