Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Konvertieren TBitmap mit Alphakanal nach TIcon (https://www.delphipraxis.net/181593-konvertieren-tbitmap-mit-alphakanal-nach-ticon.html)

Hirschmüller 27. Aug 2014 17:18

Konvertieren TBitmap mit Alphakanal nach TIcon
 
Hallo miteinander,

Wahrscheinlich stehe ich gerade auf dem Schlauch: Ich suche eine Möglichkeit, ein TBitmap (PixelFormat pf32bit) in ein TIcon zu konvertieren, aber so, dass die Teiltransparenz erhalten bleibt. Den Trick mittels TImageList kenne ich, nachteilig ist, dass die Teiltransparenz dabei flöten geht.

Siehe http://www.swissdelphicenter.ch/de/showcode.php?id=426.

In der TImageList gibt es die Methode "Add(Image, Mask: TBitmap)", deren zweiter Parameter mir schleierhaft ist. Die MSDN-Doku zu dieser API-Funktion begreife ich ganz einfach nicht.

Mir fällt jetzt nichts mehr ein, ein möglicher Umweg über TPNGImage erscheint mir doch etwas abenteuerlich - es sollte doch einfacher möglich sein?

Unter Teiltransparenz verstehe ich, dass die Werte des Alphakanal beliebige ganzzahlige Werte zwischen 0 und 255 annehmen können!
Ich verwende Delphi XE2 unter Windows 7 Home Premium 32bit.

Ich hoffe, dass mir jemand ein wenig auf die Sprünge helfen kann.


Gruß aus Wien

Bjoerk 27. Aug 2014 17:46

AW: Konvertieren TBitmap mit Alphakanal nach TIcon
 
Typisches with Problem*** :)
Delphi-Quellcode:
procedure bmp2ico(Image: TImage; FileName: TFilename);
var
  Bmp: TBitmap;
  Icon: TIcon;
  ImageList: TImageList;
begin
  Bmp := TBitmap.Create;
  Icon := TIcon.Create;
  try
    Bmp.Assign(Image.Picture);
    ImageList := TImageList.CreateSize(Bmp.Width, Bmp.Height);
    try
      ImageList.AddMasked(Bmp, Bmp.TransparentColor); // ****
      ImageList.GetIcon(0, Icon);
      Icon.SaveToFile(FileName);
    finally
      ImageList.Free;
    end;
  finally
    Bmp.Free;
    Icon.Free;
  end;
end;

DeddyH 27. Aug 2014 17:59

AW: Konvertieren TBitmap mit Alphakanal nach TIcon
 
So ist es besser ;):
Delphi-Quellcode:
  Icon := nil;
  Bmp := TBitmap.Create;
  try
    Icon := TIcon.Create;
    ...
  finally
    Bmp.Free;
    Icon.Free;
  end;

Hirschmüller 27. Aug 2014 18:59

AW: Konvertieren TBitmap mit Alphakanal nach TIcon
 
Hallo DeddyH,

Danke für die Antwort. Dies ist leider genau die Lösung, die ich schon in der Fragestellung (Link!) ausgeschlossen hatte. Bei Deiner Lösung wird nur eine einzige Farbe als Transparenz verwendet, ich will aber Teiltransparenzen haben, deshalb gibt es ja den Alphakanal und TIcon kann damit umgehen.

Gibt es nicht doch eine Lösung?

Gruß aus Wien

DeddyH 27. Aug 2014 19:06

AW: Konvertieren TBitmap mit Alphakanal nach TIcon
 
Ich habe doch gar keine Lösung gepostet :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz