[Lazarus] Converting Icon from Windows handle to TBitmap with transparency

cobines cobines at gmail.com
Wed Jun 8 01:25:19 CEST 2011


Hello everyone.

I want to convert an icon retrieved by Windows API to a TBitmap saving
transparency. As I understand transparency can be achieved by:
- using an additional Mask bitmap
- using 32bpp TBitmap with alpha channel

Having the handle to an icon from WINAPI, I convert it to TBitmap the
following way:

function IconToBitmap(h: HICON): TBitmap;
var
  icon: TIcon;
begin
  icon := TIcon.Create;
  icon.Handle := h;
  Result := TBitmap.Create;
  Result.Assign(icon);
  icon.Free;
end;

But this does not preserve transparency. I have to add:

Result.Mask(Result.TransparentColor);

Is this the correct way?

Why Icon does not automatically have a Mask? It does have
TransparentMode and TransparentColor correctly assigned.
TransparentColor is copied to TBitmap but the Mask is not copied or
not automatically created.

--
cobines




More information about the Lazarus mailing list