Unterschied bei Bitmap.Assign zu ImageList.GetBitmap

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
volker
Beiträge: 24
Registriert: Mi 14. Nov 2012, 14:36
OS, Lazarus, FPC: Rosa Linux Desktop R8 (L 1.6, FPC 2.6.4)
CPU-Target: 32Bit

Unterschied bei Bitmap.Assign zu ImageList.GetBitmap

Beitrag von volker »

Hallo an alle,
habe ein merkwürdiges Ergebnis in der Qualität der Grafik bei unterschiedlichen Prozeduren (die meines Erachtens das gleiche Ergebnis liefern müssten).
Habe eine ImageList die Wetter-Icons speichert, in diese wurden über die IDE png-Grafiken mit Transparenz reingeladen.

1) Direkte Zuweisung über GetBitmap:

Code: Alles auswählen

ImageList1.GetBitmap (i, Image1.Picture.Bitmap);
liefert eine perfekte Darstellung (ganz links im Screenshot, durchscheinende Eiszapfen.

2) Zwischenspeicherung der gleichen Grafik aus der ImageList in Bitmap1 und ein anschließendes Assign auf Image2 liefert eine pixelige Grafik, anscheinend ging die Transparenz-Information verloren (mittlere Grafik, weiße Eiszapfen ohne weich verlaufende Ränder)

Code: Alles auswählen

ImageList1.GetBitmap (i, Bitmap1);
Image2.Picture.Bitmap.Assign (Bitmap1);

3) Ein CopyRect auf die Canvas eines 3. Images (Image3, nach entsprechender "Vorbereitung" des Hintergrundes der Canvas) aus der gleichen Zwischenspeicherung in Bitmap1 liefert wieder eine perfekte Grafik (rechte Grafik, wieder schön weich verlaufende semitransparente Eiszapfen).

Code: Alles auswählen

Image3.Canvas.Brush.Color := clNavy;
Image3.Canvas.FillRect (0,0, 74,44);
Image3.Canvas.CopyRect (Rect (0,0, 74, 44), Bitmap1.Canvas, Rect (0,0, 74,44));
Also ging die Transparenz-Info doch nicht in die Hose.

Dachte immer, GetBitmap und Assign liefern exakt das gleiche Ergebnis. Ist alles nicht tragisch, wundert mich nur. Vielleicht wissen die Spezialisten unter Euch warum das so ist. Oder gibt es noch eine (mir unbekannte) Einstellung, draw-modus oder so etwas in der Art ?
Vielen Dank und viele Grüße
(Bevor einer fragt, was das soll: Ich brauche einmal direkt die Grafik aus der ImageList in Image1 dargestellt, aber auch die zwischengespeicherte Version in Bitmap1 für weitere Grafikmanipulationen)
GetBitmap, Assign, CopyRect
GetBitmap, Assign, CopyRect
Eiszapfen.png (3.15 KiB) 1712 mal betrachtet

Antworten