![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Алгоритм изменения контраста [D7, WinXP]
dimon_prorammer © (2004-04-21 10:23:00)Подкинте пожалуйста алгоритм изменения контраста для 24 - битного
битмапа.
zoltan (2004-04-21 17:09:00) [1]Я просто в панике что за люди пошли человек задал вопрос, а вы разводите флуд, формули!!!! Держи
procedure Contrast(var clip: tbitmap; Amount: Integer);
var
p0:pbytearray;
rg,gg,bg,r,g,b,x,y: Integer;
begin
for y:=0 to clip.Height-1 do
begin
p0:=clip.scanline[y];
for x:=0 to clip.Width-1 do
begin
r:=p0[x*3];
g:=p0[x*3+1];
b:=p0[x*3+2];
rg:=(Abs(127-r)*Amount)div 255;
gg:=(Abs(127-g)*Amount)div 255;
bg:=(Abs(127-b)*Amount)div 255;
if r>127 then r:=r+rg else r:=r-rg;
if g>127 then g:=g+gg else g:=g-gg;
if b>127 then b:=b+bg else b:=b-bg;
p0[x*3]:=IntToByte(r);
p0[x*3+1]:=IntToByte(g);
p0[x*3+2]:=IntToByte(b);
end;
end;
end;
VMcL (2004-04-21 11:51:00) [2]>>[lamer]Barmaglot © (21.04.04 11:16) [1]
Не RTFM, а STFW :)
KA_ (2004-04-21 11:26:00) [3]Повышение/снижение контрастности – это умножение/деление значения каждого канала на константу.
Яркость считается по формуле Y := 0.3 * R + 0.59 * G + 0.11 * B
Но есть один ньюанс - чтобы внешний вид изображения не искажался, средняя яркость после изменения контрастности должна остаться прежней. Поэтому сначала вычисляешь среднюю яркость изоражения, а потом изменяешь контрастность по формуле Y := ChangeCoeff * (Y - AverageY) + AverageY
[lamer]Barmaglot (2004-04-21 11:16:00) [4]RTFM?
http://algolist.manual.ru/graphics/filter/index.php