Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как создать ICO из BMP

Delphi , Графика и Игры , ICO

Как создать ICO из BMP


Нужно создать два 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;

Программный код на Delphi, который создает иконку (ICO) из растровой картинки (BMP). Код создает два растра: AndMask (AND- маска) и XOrMask (XOR- маска). Затем он использует эти маски для создания иконки с помощью функции API CreateIconIndirect.

Обзор кода:

  1. Получение размера системной иконки из функции GetSystemMetrics.
  2. Создание двух растров: AndMask и XOrMask. AndMask устанавливается в режим монохромного цвета.
  3. Нарисовка белого прямоугольника на AndMask, а затем эллипса (круга) с черной кистью. Это создает маску для прозрачных областей иконки.
  4. Нарисовка красной эллипсы на XOrMask в качестве теста.
  5. Создание иконки с помощью функции API CreateIconIndirect. Он передает handles двух растров, а также другие информацию, такие как координаты горячих точек и цвета масок.
  6. Уничтожение временных растров.
  7. Присвоение новой иконке свойству иконки приложения.
  8. Форсирование обновления окна приложения.

Обратите внимание, что этот код использует класс TBitmap Delphi для работы с растрами, а также класс TIcon для создания иконок. Функция API CreateIconIndirect создает иконку из параметров.

Некоторые предложения по улучшению кода:

  • Вместо жесткого кодирования размера иконки рассмотрите более гибкий подход, например, получение размера иконки из системных настроек.
  • Рассмотрите использование более эффективного метода создания масок растров. Например, вы можете использовать одиночный экземпляр класса TBitmap и установить режим монохромного цвета для создания обеих масок одновременно.
  • Вместо нарисовки тестовых паттернов на растрах рассмотрите добавление логирования или вывода отладочной информации, чтобы убедиться в том, что процесс создания иконки работает как ожидается.

В целом, этот код предоставляет хороший старт для создания ICO из BMP-картинки. С некоторыми изменениями и улучшениями он может быть сделан более эффективным и надежным.

Создать ICO из BMP можно путем создания двух bitmap-ов: маски ("AND" bitmap) и картинки (XOR bitmap), а затем передачи дескрипторов этих bitmap в API-функцию CreateIconIndirect().


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: ICO ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 19:54:26/0.0036499500274658/0