Текущий архив: 2007.01.14;
Скачать: CL | DM;
Вниз
Антиалиасинг Найти похожие ветки
← →
vain © (2006-12-23 00:38) [0]Делаю так:
const
Dir: Array [1..9, 1..2] of smallint=
((-1, -1),
(-1, 0),
(-1, 1),
(0, -1),
(0, 0),
(0, 1),
(1, -1),
(1, 0),
(1, 1));
[...]
procedure TForm1.FormClick(Sender: TObject);
var
x, y, i: integer;
cur: integer;
R, G, B: word;
begin
For y:= 0 to Self.ClientWidth do
For x:= 0 to Self.ClientWidth
do begin
Cur:= 0; R:= 0; G:= 0; B:= 0;
For i:= 1 to 9
do begin
Cur:= Self.Canvas.Pixels[x+ Dir[i, 1], y+ Dir[i, 2]];
R:= R+ Cur div 65536;
Cur:= Cur mod 65536;
G:= G+ Cur div 256;
B:= B+ Cur mod 256;
end;
R:= R div 9; G:= G div 9; B:= B div 9;
Self.Canvas.Pixels[x, y]:= RGB(R, G, B);
end;
end;
При этом, если форму залить красным ($FF0000), то он превращается в фиолетовый.
Пробовал трассировать, получается, что значение cur получается всегда -1. Странно. Таким образом, в B первый раз записывается 65535, а потом 8 раз прибавляется -1.
Вот такая проблема.
← →
Vovan #2 (2006-12-23 02:33) [1]А если форма серая, то становится голубая. Явно что-то не то.
← →
Vovan #2 (2006-12-23 02:44) [2]Если нужна была серая, то предлагаю вариант такой:
const
Dir: Array [1..9, 1..2] of smallint=
((-1, -1),
(-1, 0),
(-1, 1),
(0, -1),
(0, 0),
(0, 1),
(1, -1),
(1, 0),
(1, 1));
procedure TForm1.Button1Click(Sender: TObject);
var
x, y, i: integer;
cur: integer;
R, G, B: word;
begin
self.Canvas.Pen.Color := clBlack;
self.Canvas.Rectangle(0, 0, Self.ClientWidth, Self.ClientHeight);
For y:= 1 to Self.ClientHeight-2 do
For x:= 1 to Self.ClientWidth-2
do begin
Cur:= 0; R:= 0; G:= 0; B:= 0;
For i:= 1 to 9
do begin
Cur:= Self.Canvas.Pixels[x+ Dir[i, 1], y+ Dir[i, 2]];
R := R + GetRValue(Cur);
G := G + GetGValue(Cur);
B := B + GetBValue(Cur);
end;
R:= R div 9; G:= G div 9; B:= B div 9;
Self.Canvas.Pixels[x, y]:= RGB(R, G, B);
end;
← →
vain © (2006-12-23 11:08) [3]
> GetRValue
!!!
Спасибо.
Видимо неправилен этот кусок кода:
> R:= R+ Cur div 65536;
> Cur:= Cur mod 65536;
> G:= G+ Cur div 256;
> B:= B+ Cur mod 256;
Хотя почему - не знаю.
← →
Pavia © (2006-12-23 16:46) [4]Ты просто перепутал в TColor цвета идут в другом порядке -ABGR.
можно было бы так сделать:
B:= B+ Cur div 65536;
Cur:= Cur mod 65536;
G:= G+ Cur div 256;
R:= R+ Cur mod 256;
Страницы: 1 вся ветка
Текущий архив: 2007.01.14;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.03 c