Конвертируем битмап в иконку (ico)

Вам необходимо создать два битмапа, битмап маски (назовём его "AND" bitmap) и битмап изображения (назовём его XOR bitmap). Вы можете пропустить обработчики для "AND" и "XOR" битмапов в Windows API функции CreateIconIndirect() и использовать обработчик возвращённой иконки в Вашем приложении.

Пример:


procedure TForm1.Button1Click(Sender: TObject);   
var   
  IconSizeX : integer;   
  IconSizeY : integer;   
  AndMask : TBitmap;   
  XOrMask : TBitmap;   
  IconInfo : TIconInfo;   
  Icon : TIcon;   
begin   
{Получаем размер иконки}   
  IconSizeX := GetSystemMetrics(SM_CXICON);   
  IconSizeY := GetSystemMetrics(SM_CYICON);   
  
{Создаём маску "And"}   
  AndMask := TBitmap.Create;   
  AndMask.Monochrome := true;   
  AndMask.Width := IconSizeX;   
  AndMask.Height := IconSizeY;   
  
{Рисуем на маске "And"}   
  AndMask.Canvas.Brush.Color := clWhite;   
  AndMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));   
  AndMask.Canvas.Brush.Color := clBlack;   
  AndMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);   
  
{Рисуем для теста}   
  Form1.Canvas.Draw(IconSizeX * 2, IconSizeY, AndMask);   
  
{Создаём маску "XOr"}   
  XOrMask := TBitmap.Create;   
  XOrMask.Width := IconSizeX;   
  XOrMask.Height := IconSizeY;   
  
{Рисуем на маске "XOr"}   
  XOrMask.Canvas.Brush.Color := ClBlack;   
  XOrMask.Canvas.FillRect(Rect(0, 0, IconSizeX, IconSizeY));   
  XOrMask.Canvas.Pen.Color := clRed;   
  XOrMask.Canvas.Brush.Color := clRed;   
  XOrMask.Canvas.Ellipse(4, 4, IconSizeX - 4, IconSizeY - 4);   
  
{Рисуем в качестве теста}   
  Form1.Canvas.Draw(IconSizeX * 4, IconSizeY, XOrMask);   
  
{Создаём иконку}   
  Icon := TIcon.Create;   
  IconInfo.fIcon := true;   
  IconInfo.xHotspot := 0;   
  IconInfo.yHotspot := 0;   
  IconInfo.hbmMask := AndMask.Handle;   
  IconInfo.hbmColor := XOrMask.Handle;   
  Icon.Handle := CreateIconIndirect(IconInfo);   
  
{Уничтожаем временные битмапы}   
  AndMask.Free;   
  XOrMask.Free;   
  
{Рисуем в качестве теста}   
  Form1.Canvas.Draw(IconSizeX * 6, IconSizeY, Icon);   
  
{Объявляем иконку в качестве иконки приложения}   
  Application.Icon := Icon;   
  
{генерируем перерисовку}   
  InvalidateRect(Application.Handle, nil, true);   
  
{Освобождаем иконку}   
  Icon.Free;   
end;  
Теги:
битмап
Добавлено: 27 Июля 2018 22:47:21 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...