Convert png/jpg/gif to ico
我有多张图像,有些是png,有些是jpg和gif,我想在列表视图中显示它们,因为缩图TImageList仅支持图标,我如何将它们转换为能够将它们插入到TImageList中。
我正在使用Delphi XE
要专门回答该问题,还要考虑简单的调整大小(对于缩略图),请使用一些示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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; |
或者,而不创建图标:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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; |