![]() |
![]() ![]() ![]() ![]() |
|
Изменение контрастности изображенияDelphi , Графика и Игры , Bitmap
Автор: Fenik
{ **** UBPFD *********** by delphibase.endimus.com ****
>>
Value - значение контрастности на отрезке [-100..100]
Local - если True, то применяется "местный контраст",
если False, то - "общий" (более красивый)
Зависимости: Windows
Автор: Fenik, chook_nu@uraltc.ru, Новоуральск
Copyright: Николай Федоровских
Дата: 14 июля 2003 г.
***************************************************** }
procedure Contrast(Bitmap: TBitmap; Value: Integer; Local: Boolean);
function BLimit(B: Integer): Byte;
begin
if B < 0 then
Result := 0
else if B > 255 then
Result := 255
else
Result := B;
end;
var
Dest: pRGBTriple;
x, y, mr, mg, mb,
W, H, tr, tg, tb: Integer;
vd: Double;
begin
if Value = 0 then
Exit;
W := Bitmap.Width - 1;
H := Bitmap.Height - 1;
if Local then
begin
mR := 128;
mG := 128;
mB := 128;
end
else
begin
tr := 0;
tg := 0;
tb := 0;
for y := 0 to H do
begin
Dest := Bitmap.ScanLine[y];
for x := 0 to W do
begin
with Dest^ do
begin
Inc(tb, rgbtBlue);
Inc(tg, rgbtGreen);
Inc(tr, rgbtRed);
end;
Inc(Dest);
end;
end;
mB := Trunc(tb / (W * H));
mG := Trunc(tg / (W * H));
mR := Trunc(tr / (W * H));
end;
if Value > 0 then
vd := 1 + (Value / 10)
else
vd := 1 - (Sqrt(-Value) / 10);
for y := 0 to H do
begin
Dest := Bitmap.ScanLine[y];
for x := 0 to W do
begin
with Dest^ do
begin
rgbtBlue := BLimit(mB + Trunc((rgbtBlue - mB) * vd));
rgbtGreen := BLimit(mG + Trunc((rgbtGreen - mG) * vd));
rgbtRed := BLimit(mR + Trunc((rgbtRed - mR) * vd));
end;
Inc(Dest);
end;
end;
end;
Программа на Delphi для коррекции контраста изображения принимает три параметра: Вот шаг за шагом, что код делает:
Метод локальной коррекции контраста перебирает каждый пиксель в изображении и изменяет его цветовые значения на основе средних значений, рассчитанных ранее. Это означает, что пиксели с цветовыми значениями, близкими к средним, будут изменяться меньше, чем те, которые farther away от средних. В целом, эта программа предоставляет способ коррекции контраста изображения с помощью либо локальных, либо глобальных методов, в зависимости от значения параметра Вот некоторые предложения и улучшения:
Код также может быть улучшен с точки зрения организации и читаемости, разбивая его на меньшие функции или процедуры, которые выполняют конкретные задачи. Это сделает код более понятным и поддерживаемым. В статье описана процедура изменения контрастности изображения в Delphi, которая позволяет изменять контрастность на отрезке [-100..100] и выбирать между локальным и общим способом изменения контрастности. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||