{
Dieses ist eine ziemlich schnelle Methode, eine Farbumkehrung auf einem
Bitmap anzuwenden.
}{
This is a very fast method to invert the colors of a bitmap.
}function InvertBitmap(MyBitmap: TBitmap): TBitmap;
var
x, y: Integer;
ByteArray: PByteArray;
begin
MyBitmap.PixelFormat := pf24Bit;
for y := 0 to MyBitmap.Height - 1 dobegin
ByteArray := MyBitmap.ScanLine[y];
for x := 0 to MyBitmap.Width * 3 - 1 dobegin
ByteArray[x] := 255 - ByteArray[x];
end;
end;
Result := MyBitmap;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.Bitmap := InvertBitmap(Image1.Picture.Bitmap);
Image1.Refresh;
end;
Переведенный текст:
Функция InvertBitmap в Delphi принимает объект TBitmap в качестве входного параметра, инвертирует его цвета и возвращает модифицированную картинку. Процесс инверсии涉гывает перебор каждого пикселя картинки, вычитание каждой компоненты цвета из 255 (максимальной значения) и хранение результата обратно в оригинальном пикселе.
Разбивка функции:
MyBitmap.PixelFormat := pf24Bit; - эта строка устанавливает формат пикселей входной картинки в 24-бит, что означает, что каждый пиксель представлен тремя байтами (красный, зеленый и синий) без канала альфа.
Внешний цикл (for y := 0 to MyBitmap.Height - 1 do) перебирает каждую строку (линию сканирования) картинки.
Внутренний цикл (for x := 0 to MyBitmap.Width * 3 - 1 do) перебирает каждый пиксель в строке. Поскольку каждый пиксель представлен тремя байтами, мы должны умножить MyBitmap.Width на 3, чтобы получить общее количество пикселей (включая компоненты красного, зеленого и синего цветов).
ByteArray[x] := 255 - ByteArray[x]; - эта строка вычитает каждую компоненту цвета из 255, эффективно инвертируя цвет пикселя.
Функция возвращает модифицированную картинку с помощью ключевого слова Result. Процедура Button1Click является обработчиком события, который вызывает InvertBitmap для картинки Image1.Picture.Bitmap, присваивает результат обратно изображению и обновляет контроль изображения.
Некоторые предложения по улучшению:
Вместо ручного установки формата пикселей можно использовать метод TBitmap.SetPixelFormat с более явным значением (например, pf24BitRGB).
Можно рассмотреть использование типа TColor или аналогичного для представления цветов вместо raw байтов.
Функция может выиграть от добавления проверки ошибок, таких как обработка случаев, когда входная картинка null или имеет не поддерживаемый формат пикселей.
В целом, это код обеспечивает простой и эффективный способ инвертирования цветов в Delphi-картинке.
Инвертировать Bitmap - это функция, которая быстро изменяет цвета bitmap, позволяя инвертировать их и создавать наоборотый эффект.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.