На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Графика / Как создать иконку из bitmap'а? Сделать домашней страницей Добавить в избранное Написать писмо

Как создать иконку из bitmap'а?


Нужно создать два bitmap'а: bitmap-маску ("AND" bitmap) и bitmap-картинку (XOR bitmap). Потом передать дескрипторы "AND" и "XOR" bitmap-ов API функции CreateIconIndirect()
Пример:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      IconSizeX : integer;
      IconSizeY : integer;
      AndMask : TBitmap;
      XOrMask : TBitmap;
      IconInfo : TIconInfo;
      Icon : TIcon;
    begin
     {Get the icon size}
      IconSizeX := GetSystemMetrics(SM_CXICON);
      IconSizeY := GetSystemMetrics(SM_CYICON);

     {Create the "And" mask}
      AndMask := TBitmap.Create;
      AndMask.Monochrome := true;
      AndMask.Width := IconSizeX;
      AndMask.Height := IconSizeY;

     {Draw on the "And" mask}
      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);

     {Draw as a test}
      Form1.Canvas.Draw(IconSizeX * 2, IconSizeY, AndMask);

     {Create the "XOr" mask}
      XOrMask := TBitmap.Create;
      XOrMask.Width := IconSizeX;
      XOrMask.Height := IconSizeY;

     {Draw on the "XOr" mask}
      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);

     {Draw as a test}
      Form1.Canvas.Draw(IconSizeX * 4, IconSizeY, XOrMask);

     {Create a icon}
      Icon := TIcon.Create;
      IconInfo.fIcon := true;
      IconInfo.xHotspot := 0;
      IconInfo.yHotspot := 0;
      IconInfo.hbmMask := AndMask.Handle;
      IconInfo.hbmColor := XOrMask.Handle;
      Icon.Handle := CreateIconIndirect(IconInfo);

     {Destroy the temporary bitmaps}
      AndMask.Free;
      XOrMask.Free;

     {Draw as a test}
      Form1.Canvas.Draw(IconSizeX * 6, IconSizeY, Icon);

     {Assign the application icon}
      Application.Icon := Icon;

     {Force a repaint}
      InvalidateRect(Application.Handle, nil, true);

     {Free the icon}
      Icon.Free;
    end;


Источник: Дельфи. Вокруг да около.

Комментарий от "Артанов Михаил" (mihalych@mail.ru)
Оказывается, можно проще. Просто сресайзить битмап до 32 на 32 или 64 на 64 и переменовать в .ico

Copyright ©   "Мастера DELPHI"   E-mail:   delphi@mastak.com  http://www.delphimaster.ru
Источник получения информации: http://www.delphimaster.ru
Hosted by uCoz