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

Вставить Bitmap

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

Вставить Bitmap

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

function InvertBmp1(SourceBmp: TBitmap): TBitMap;
 var
   i, j: Longint;
   tmp: TBitMap;
   red, green, blue: Byte;
   PixelColor: Longint;
 begin
   tmp := TBitmap.Create;
   tmp.Width  := SourceBmp.Width;
   tmp.Height := SourceBmp.Height;
   for i := 0 to SourceBmp.Width - 1 do
   begin
     for j := 0 to SourceBmp.Height - 1 do
     begin
       PixelColor := ColorToRGB(SourceBmp.Canvas.Pixels[i, j]);
       red := PixelColor;
       green := PixelColor shr 8;
       blue := PixelColor shr 16;
       red  := 255 - red;
       green := 255 - green;
       blue := 255 - blue;
       tmp.Canvas.pixels[i, j] := (red shl 8 + green) shl 8 + blue;
     end;
   end;
   Result := tmp;
 end;

 function InvertBmp2(ABitmap : TBitmap) : TBitmap;
 var
   l_bmp : TBitmap;
 begin
   l_bmp := TBitmap.Create;
   l_bmp.Width := ABitmap.Width;
   l_bmp.Height := ABitmap.Height;
   l_bmp.PixelFormat := ABitmap.PixelFormat;
   BitBlt( l_bmp.Canvas.Handle, 0, 0, l_bmp.Width, l_bmp.Height,
     ABitmap.Canvas.Handle, 0, 0, SRCINVERT );
   result := l_bmp;
 end;

Функции InvertBmp1 и InvertBmp2 используются для инвертирования цветов изображения в формате bitmap.

Функция InvertBmp1 Эта функция создает новый объект TBitmap, проходит по каждому пикселю оригинального изображения, извлекает красный, зеленый и синий компоненты цвета, а затем инвертирует их. Инвертированные значения цвета записываются обратно в соответствующие пиксели нового изображения.

Сюда входят шаги:

  • Создается новый объект TBitmap (tmp)
  • Ширина и высота нового изображения устанавливаются равными ширине и высоте оригинального изображения
  • Проходится по каждому пикселю оригинального изображения с помощью двух вложенных циклов
  • Для каждого пикселя извлекаются красный, зеленый и синий компоненты цвета из значения пикселя с помощью операций bitwise
  • Каждый компонент цвета инвертируется путем вычитания его из 255 (максимального возможного значения для байта)
  • Инвертированные значения цвета записываются обратно в соответствующие пиксели нового изображения

Функция InvertBmp2 Эта функция также создает новый объект TBitmap, но вместо ручного прохода по каждому пикселю и инвертирования цветов она использует функцию BitBlt (Bit Block Transfer) для выполнения инверсии.

Сюда входят шаги:

  • Создается новый объект TBitmap (l_bmp)
  • Ширина и высота нового изображения устанавливаются равными ширине и высоте оригинального изображения
  • Копируются формат пикселей из оригинального изображения в новое изображение
  • Используется BitBlt, чтобы скопировать каждый пиксель из оригинального изображения, инвертируя цвета при этом
    • SRCINVERT - константа, которая указывает BitBlt, что нужно инвертировать исходные пиксели
  • Возвращает новое инвертированное изображение

Сравнение Обе функции достигают одного и того же результата: они инвертируют цвета изображения. Однако InvertBmp1 это делает вручную, проходим по каждому пикселю и инвертируя значения цвета, а InvertBmp2 использует функцию BitBlt, чтобы выполнить инверсию.

InvertBmp1 может быть медленнее для больших изображений из-за большего количества вычислений и доступов к памяти. С другой стороны, InvertBmp2 зависит от системы graphics library, чтобы выполнить инверсию, что может быть быстрее, но также менее гибко (поскольку она работает только с определенным типом изображений).

Альтернативное решение Если вы хотите более эффективное и гибкое решение, вы можете использовать третьестороннюю библиотеку, предоставляющую функции обработки изображений, такие как Graphics32 или FPImage. Эти библиотеки часто содержат оптимизированные реализации общих операций обработки изображений, таких как инверсия цвета.

Альтернативно, если вам нужно выполнить другие типы преобразований изображений помимо инверсии цвета, вы можете рассмотреть использование специализированной библиотеки обработки изображений, такой как Magick++ (Delphi-обёртка вокруг C++-библиотеки ImageMagick).

В статье описываются два алгоритма для инвертирования растровой картинки в Delphi: с использованием функции ColorToRGB и с помощью процедуры BitBlt.


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

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




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


:: Главная :: Bitmap ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 01:29:04/0.0034568309783936/0