Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
15-1167028847
Новый
2006-12-25 09:40
2007.01.14
Можно ли, передать в DLL


2-1167147616
AlexanderMS
2006-12-26 18:40
2007.01.14
Шрифт печати...


15-1166707111
Новый
2006-12-21 16:18
2007.01.14
Алгоритмы шифрования


15-1166689502
Nic (from SAF)
2006-12-21 11:25
2007.01.14
Посмотрел сегодня исходник 2-летней давности


2-1166779331
fewr
2006-12-22 12:22
2007.01.14
Дайте пожалста ib 5.5.0.742