Para responder específicamente a la cuestión, también para tomar el cambio de tamaño simple en cuenta (miniaturas), un código de ejemplo:
var
Img: TImage;
BmImg: TBitmap;
Bmp: TBitmap;
BmpMask: TBitmap;
IconInfo: TIconInfo;
Ico: TIcon;
begin
Img := TImage.Create(nil);
Img.Picture.LoadFromFile(...
BmImg := TBitmap.Create;
BmImg.Assign(Img.Picture.Graphic);
Img.Free;
Bmp := TBitmap.Create;
Bmp.SetSize(ImageList1.Width, ImageList1.Height);
SetStretchBltMode(Bmp.Canvas.Handle, HALFTONE);
StretchBlt(Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height,
BmImg.Canvas.Handle, 0, 0, BmImg.Width, BmImg.Height, SRCCOPY);
BmImg.Free;
BmpMask := TBitmap.Create;
BmpMask.Canvas.Brush.Color := clBlack;
BmpMask.SetSize(Bmp.Width, Bmp.Height);
FillChar(IconInfo, SizeOf(IconInfo), 0);
IconInfo.fIcon := True;
IconInfo.hbmMask := BmpMask.Handle;
IconInfo.hbmColor := Bmp.Handle;
Ico := TIcon.Create;
Ico.Handle := CreateIconIndirect(IconInfo);
ImageList1.AddIcon(Ico);
Bmp.Free;
BmpMask.Free;
Ico.Free; // calls DestroyIcon
end;
o, sin crear un icono:
var
Img: TImage;
BmImg: TBitmap;
Bmp: TBitmap;
begin
Img := TImage.Create(nil);
Img.Picture.LoadFromFile(..
BmImg := TBitmap.Create;
BmImg.Assign(Img.Picture.Graphic);
Img.Free;
Bmp := TBitmap.Create;
Bmp.SetSize(ImageList1.Width, ImageList1.Height);
SetStretchBltMode(Bmp.Canvas.Handle, HALFTONE);
StretchBlt(Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height,
BmImg.Canvas.Handle, 0, 0, BmImg.Width, BmImg.Height, SRCCOPY);
BmImg.Free;
ImageList1.AddMasked(Bmp, clNone);
Bmp.Free;
end;
esto suena como el suyo http://stackoverflow.com/a/961542/920384 – punker76
IcoFX puede crear e importar imágenes en archivos ICO. – frogb
El 'TImageList' estándar también admite mapas de bits. –