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

Исправление ошибок в коде Delphi: преобразование изображений PNG в оттенки серого

Delphi , Графика и Игры , Изображения

Прежде чем приступить к написанию статьи, стоит уточнить, что задача заключается в исправлении ошибки в коде на Delphi, который предназначен для преобразования изображения PNG в оттенки серого. В контексте уже содержится решение проблемы, которое заключается в использовании другой логики для преобразования цветов пикселей. Также упоминается альтернативный ответ, который предлагает использовать формулу NTSC для более точного преобразования.

Описание проблемы

Пользователь столкнулся с проблемой при попытке преобразовать изображение PNG в оттенки серого в среде Delphi. Код, представленный в вопросе, некорректно обрабатывает пиксели изображения, что приводит к нежелательным искажениям. Основная ошибка заключается в неправильном использовании свойств цветных компонентов пикселей.

Подтвержденный ответ

Для корректного преобразования изображения в оттенки серого можно использовать следующий подход:

type
  PRGB32Array = ^TRGB32Array;
  TRGB32Array = packed array[0..MaxInt div SizeOf(TRGBQuad)-1] of TRGBQuad;

procedure MakeGrey(Bitmap: TBitmap);
var
  w, h: integer;
  y, sl: Integer;
  x, grey: byte;
begin
  Bitmap.PixelFormat := pf32bit;
  w := Bitmap.Width;
  h := Bitmap.Height;
  for y := 0 to h - 1 do
  begin
    sl := Bitmap.ScanLine[y];
    for x := 0 to w - 1 do
    begin
      with sl[x] do
      begin
        grey := (rgbBlue + rgbGreen + rgbRed) div 3;
        rgbBlue := grey;
        rgbGreen := grey;
        rgbRed := grey;
      end;
    end;
  end;
end;

procedure TForm4.Button1Click(Sender: TObject);
var
  png: TPNGImage;
  bm: TBitmap;
begin
  png := TPNGImage.Create;
  try
    png.LoadFromFile('C:\Untitled.png');
    bm := png.ToBitmap;
    MakeGrey(bm);
    Image1.Picture.Graphic := bm;
  finally
    png.Free;
    bm.Free;
  end;
end;

Альтернативный ответ

Существует альтернативный способ преобразования, который использует формулу NTSC для более точного воспроизведения оттенков серого:

procedure MakeGreyNTSC(Bitmap: TBitmap);
var
  w, h: integer;
  y, sl: Integer;
  x, grey: Byte;
begin
  Bitmap.PixelFormat := pf32bit;
  w := Bitmap.Width;
  h := Bitmap.Height;
  for y := 0 to h - 1 do
  begin
    sl := Bitmap.ScanLine[y];
    for x := 0 to w - 1 do
    begin
      with sl[x] do
      begin
        grey := Round(rgbRed * .3) + Round(rgbGreen * .59) + Round(rgbBlue * .11);
        rgbBlue := grey;
        rgbGreen := grey;
        rgbRed := grey;
      end;
    end;
  end;
end;

Пример использования

procedure TForm4.Button1Click(Sender: TObject);
var
  png: TPNGImage;
  bm: TBitmap;
begin
  png := TPNGImage.Create;
  try
    png.LoadFromFile('C:\Untitled.png');
    bm := png.ToBitmap;
    MakeGreyNTSC(bm);
    Image1.Picture.Graphic := bm;
  finally
    png.Free;
    bm.Free;
  end;
end;

Заключение

В статье был представлен метод исправления ошибки в коде на Delphi для преобразования изображений PNG в оттенки серого. Были рассмотрены два подхода: простой способ с усреднением цветовых компонентов и более сложный, использующий формулу NTSC для более точного преобразования. Выбор метода зависит от конкретных требований к качеству изображения и производительности.

Создано по материалам из источника по ссылке.

Исправление ошибки в коде Delphi для преобразования изображений PNG в оттенки серого с использованием правильной логики обработки цветов пикселей и альтернативной формулы NTSC.


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

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




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


:: Главная :: Изображения ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-03-11 10:40:04/0.0054500102996826/1