Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Bitmap mit transparenter Frabe aus TImageList laden
Rainer78 - Di 11.12.12 11:28
Titel: Bitmap mit transparenter Frabe aus TImageList laden
Hallo zusammen,
ich habe eine Frage bzgl. der TImagelist. Das Grundproblem ist hier schon recht häufig diskutiert worden, aber die angegebenen Lösungen haben bei mir nicht geklappt.
Ich habe von einem Kollegen ein Projekt übernommen. In diesem Projekt werden TImageLists verwendet, welche diverse BMP-Dateien beinhalten. Die Imagelists-Objekte haben alle die gleichen Einstellungen:
BkColor = clNone
BlendColor = clNone
ImageType=itImage
Masked=True
ShareImages=False
Wenn ich über den Property-Editor die einzelnen Bilder in Dateien exportiere erhalte ich die Bilder so wie sie sein sollen (magentafarbende Hintergrund). Lese ich die Bilder zur Laufzeit per GetImage aus, bekomme ich einen weißen Hintergrund. Da der relevante Bereich des Bildes auch die Farbe weiß enthält, ist das "suboptimal". Sobald ich dann nämlich das ausgelesene Bild auf transparent setze, wird im Bild natürlich auch der weiße Bereich transparent dargestellt.
Jetzt wollte ich mal schauen, wie das der Property-Editor macht. Dieser schafft es ja die Bilder richtig zu exportieren.
Hat einer von Euch eine Idee, wo ich ihn finde?
Im Verzeichnis BDS\3.0\source\Win32\PropertyEditors finde ich ihn nicht.
Gruß,
Rainer
Rainer78 - Di 11.12.12 17:31
Problem gelöst.
Ich habe zwar nicht den Editor gefunden, aber eine Ursache für meine Problematik von getBitmap gefunden.
Für alle die evtl. auch Probleme damit haben:
Bevor ImageList1.GetBitmap aufgerufen wird, muss man das Bitmap selbst mit der Farbe füllen, die dann das Transparente darstellt.
Hintergrund: Wird ein Bitmap per Create neu erzeugt, ist der Inhalt weiß. Wird nun per GetBitmap ein Bild darauf gezeichnet / geladen, bleibt der Hintergrund weiterhin weiß (an den Stellen, an denen das Bild aus der imagelist "Transparent" ist). Hat das Bild aus der Imagelist nun auch Bereiche die normal "weiß" sind, werden diese später mit transparent dargestellt.
Man kann also wie folgt vorgehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| LBitmap.Transparent := True; LBitmap.width := Imagelist1.width; LBitmap.Height := Imagelist1.height; LBitmap.Pixelformat := pf32bit; LBitmap.canvas.brush.color := clFuchsia; LBitmap.Canvas.Brush.Style := bsSolid; LBitmap.Canvas.FillRect(Rect(0,0,LBitmap.Width, LBitmap.Height)); ImageList1.GetBitmap(BildIndex, LBitmap); |
Gruß,
Rainer
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!