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

256-цветное изображение из res-файла

Delphi , Файловая система , Ресурсы

256-цветное изображение из res-файла

Автор: Mark Lussier

Вот функция, правильно читающая 256-цветные изображения из файла ресурсов.


function LoadBitmap256(hInstance: HWND; lpBitmapName: PChar): HBITMAP;
var
  hPal, hRes, hResInfo: THandle;
  pBitmap: PBitmapInfo;
  nColorData: Integer;
  pPalette: PLogPalette;
  X: Integer;
  hPalette: THandle;
begin

  hResInfo := FindResource(hInstance, lpBitmapName, RT_BITMAP);
  hRes := LoadResource(hInstance, hResInfo);
  pBitmap := Lockresource(hRes);
  nColorData := pBitmap^.bmiHeader.biClrUsed;

  hPal := GlobalAlloc(GMEM_MOVEABLE, (16 * nColorData));

  {  hPal := GlobalAlloc( GMEM_MOVEABLE, ( SizeOf( LOGPALETTE ) +
  (nColorData * SizeOf( PALETTEENTRY )));}
  pPalette := GlobalLock(hPal);
  pPalette^.palVersion := $300;
  pPalette^.palNumEntries := nColorData;

  for x := 0 to nColorData do
  begin
    pPalette^.palPalentry[X].peRed := pBitmap^.bmiColors[X].rgbRed;
    pPalette^.palPalentry[X].peGreen := pBitmap^.bmiColors[X].rgbGreen;
    pPalette^.palPalentry[X].peBlue := pBitmap^.bmiColors[X].rgbBlue;
  end;

  hPalette := CreatePalette(pPalette^);
  GlobalUnlock(hRes);
  GlobalUnlock(hPal);
  GlobalFree(hPal);

end;

end.

Функция Delphi LoadBitmap256 загружает 256-цветную картинку из файла ресурсов и возвращает ее handle в виде HBITMAP. Вот разбивка кода:

  1. Функция принимает два параметра: hInstance, который является handle приложения, и lpBitmapName, который является именем ресурса картинки.
  2. Она использует функцию FindResource для поиска ресурса картинки с указанным именем.
  3. Затем она загружает ресурс с помощью LoadResource и блокирует его с помощью LockResource.
  4. Она извлекает информацию из заголовка картинки, включая количество цветных данных (nColorData).
  5. Она выделяет память для палеты с помощью GlobalAlloc и блокирует ее с помощью GlobalLock.
  6. Она инициализирует структуру палеты версией 3.00 и устанавливает количество входов в nColorData.
  7. Затем она проходит по каждому входу в палете и копирует RGB-значения из таблицы цветов картинки (pBitmap^.bmiColors) в палету.
  8. Она создает новую палету с помощью CreatePalette и передает ей заблокированные данные палеты.
  9. Наконец, она разблокирует память ресурса и палеты, а также освобождает память палеты.

Комментированный код предполагает, что была альтернативная стратегия выделения памяти для палеты, которая не используется в этом реализации.

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

  • Рассмотрите добавление обработки ошибок для случаев, когда ресурс не может быть найден или загружен.
  • Вам может потребоваться более эффективный алгоритм для загрузки и обработки таблицы цветов, особенно для больших картинок.
  • Функция возвращает handle HBITMAP, но она не хранит это значение где-либо. Если вы планируете использовать это handle в других частях вашего кода, вам нужно сохранить его в переменной или поле класса.

В целом, код appears to be well-structured and easy to follow. However, as with any code, there may be opportunities for optimization and improvement depending on the specific requirements of your application.

Функция LoadBitmap256 читает и загружает 256-цветное изображение из файла ресурсов, создавая палету цветов на основе информации о цветах в битовом формате.


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

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




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


:: Главная :: Ресурсы ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2024-12-27 00:53:48/0.0032269954681396/0