Autor Beitrag
Rainer78
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 11.12.12 11:28 
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


Zuletzt bearbeitet von Rainer78 am Di 11.12.12 17:32, insgesamt 1-mal bearbeitet
Rainer78 Threadstarter
Hält's aus hier
Beiträge: 13



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

ausblenden 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; // Das ist die Farbe, die später transparent sein soll
LBitmap.Canvas.Brush.Style := bsSolid;
LBitmap.Canvas.FillRect(Rect(0,0,LBitmap.Width, LBitmap.Height));
ImageList1.GetBitmap(BildIndex, LBitmap);


Gruß,

Rainer