hat sich erledigt.
habe folgende funktion gefunden:
Delphi-Quellcode:
function IconToBitmap(
const IconHandle: HIcon):TBitmap;
var
IcoInfo: TIconInfo;
mask: TBitmap;
x, y: word;
begin
result :=
nil;
if NOT GetIconInfo(IconHandle, IcoInfo)
then
exit;
// ungültiges Icon Handle or whatever
try
try
// Übernahme des Color Kanals und des ggf. vorhandenen Alphakanals. Ist kein Alpha Kanal vorhanden, wird er später durch den Masked Bereich hinzugefügt.
result := TBitmap.Create;
result.Handle := IcoInfo.hbmColor;
result.PixelFormat := pf32bit;
// Übernahme des Masked Bereichs. Sollten die Alpha Werte im maskierten Bereich ungleich 255 (voll sichtbar sein), werden sie auf 255 gesetzt.
mask := TBitmap.Create;
mask.Handle := IcoInfo.hbmMask;
mask.PixelFormat := pf32bit;
for x := 0
to result.Width-1
do
for y := 0
to result.Height-1
do
pRGBALine(result.Scanline[y])^[x].rgbReserved :=
NOT pRGBALine(mask.Scanline[y])^[x].rgbRed;
// Übernahme des Masked Bereichs, ist entweder 0 (voll sichtbar) oder aber 255 (gar nicht sichtbar), deswegen auch das NOT davor weil der Alpha Kanal von Bitmaps genau andersrum arbeitet.
except
FreeAndNil(result);
end;
finally
if Assigned(mask)
then
mask.Free;
end;
end;
leider ist die strech funktion sehr bescheiden. im original 32x32 große icons sehen auf 16x16 gestaucht doch seeeeehr bescheiden aus.
lässt sich da was machen? interpolieren oder sowas?