Немного про работу с графикой.

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

Сначала откроем новый проект.

На форме разместим элемент Image1

change color gray1 424x350 Преобразование в оттенки серого на Delphi 7

 

В свойстве Picture элемента Image1 выберем какое-нибудь изображение (нажать Load, затем выбрать картинку, нажать Открыть и ОК).

change color gray2 450x243 Преобразование в оттенки серого на Delphi 7

 

Растянем вставленную картинку до нужного размера.

 

change color gray3 432x350 Преобразование в оттенки серого на Delphi 7

 

Затем вставим в форму кнопку Button1

change color gray4 450x236 Преобразование в оттенки серого на Delphi 7

 

Растянем ее в свойстве Caption напишем "Преобразовать"

change color gray5 450x207 Преобразование в оттенки серого на Delphi 7

 

Зададим нужные нам переменные

var
Form1: TForm1;
I1: TImage;
DeskTopCanvas: TCanvas;
r, g, b, w, h, x, y, rgb, Gscale : integer;

 

Затем в кнопку Button1 поместим следующий код

procedure TForm1.Button1Click(Sender: TObject);
begin

I1:=TImage.Create(image1);
i1.Picture.Bitmap.Assign(image1.picture.graphic);
w:=I1.Picture.Width-1;
h:=I1.Picture.Height-1;

for x:=1 to w do begin
for y:=1 to h do begin

rgb:=ColorToRgb(I1.Canvas.Pixels[x,y]);

r := getRvalue(rgb);
g := getGvalue(rgb);
b := getBvalue(rgb);
gscale:=round((0.30*GetRValue(rgb))+(0.59*GetGValue(rgb))+(0.11*GetBValue(rgb)));

I1.Canvas.Pixels[x,y]:=windows.RGB(GScale,GScale, GScale);

end;
end;

end;

В коде в двойном цикле for по вертикали и горизонтали пиксель за пикселем считывается цвет каждой точки в переменную rgb, затем извлекаются красная, зеленая и синяя составляющие (r,g и b), после чего по формуле вычисляется gscale для точки с оттенком серого.

 

change color gray6 450x311 Преобразование в оттенки серого на Delphi 7

 

Дополнительно можно добавит кнопочку  "Загрузить" и в ней прописать код для загрузки картинки в форму из файла:

procedure TForm1.Button2Click(Sender: TObject);
begin
image1.Picture.LoadFromFile('flo.jpg');
end;

Файл будет загружаться из папки с проектом.

change color gray71 450x223 Преобразование в оттенки серого на Delphi 7

 

И вдогонку можно добавить еще возможность сохранения в файле формата JPG.

В процедуру TForm1.Button1Click добавим переменную

var jpg:TJpegImage;

а в конце допишем следующие пять строчек:

jpg:=TJpegImage.Create;
jpg.Assign(image1.picture.graphic);
jpg.CompressionQuality:=70;
jpg.Compress;

jpg.SaveToFile('test.jpg');

Как можно понять, данный код создает jpeg с компрессией 70% и сохраняет его в  файл test.jpg в папке с проектом.

change color gray8 450x260 Преобразование в оттенки серого на Delphi 7

 

В результате получится следующее:

change color gray9 450x332 Преобразование в оттенки серого на Delphi 7

Форма с картинкой и двумя кнопками.

 

change color gray10 450x333 Преобразование в оттенки серого на Delphi 7

При нажатии кнопки Преобразовать картинка будет преобразовываться в оттенки серого и сохраняться в виде файлов bmp и jpeg.

 

change color gray11 450x334 Преобразование в оттенки серого на Delphi 7

При нажатии на кнопку "Загрузить" картинка будет возвращаться к исходному состоянию.


Скачать исходники преобразования в оттенки серого для Delphi7

Данный урок размещен в разделе Уроки Delphi7 под номером 3 (урок Простая база данных "ТЕЛЕФОННАЯ КНИЖКА" на Delphi 7 переименован из Урока 3 в Урок 4 )

Надеюсь данный урок будет Вам полезен.