|
Вопрос # 3 482/ вопрос открыт / |
|
Здравствуйте уважаемые эксперты!
Пожскажите,пожалуйста,как в программе-графическом
редакторе создать фильтр размытия в движении по вертикали с заданным размером сдвига. Я представляю себе,как сделать просто фильтр размытия(
Приложение: Переключить в обычный режим-
- procedure TFmFilter.BitBtn1Click(Sender: TObject);
- var
-
- L,k,h,w : integer;
-
-
- nR,nG,nB : integer;
- sr,sg,sb : integer;
- MasR, MasG, MasB : array [1..10] of integer;
- Begin
- FilterBuffer:=TBitmap.Create;
-
- Undo_Buffer[Current_Fm].Width:=Fm_pic[Current_Fm].pic.Picture.Bitmap.Width;
- Undo_Buffer[Current_Fm].Height:=Fm_pic[Current_Fm].pic.Picture.Bitmap.Height;
- h:=Undo_Buffer[Current_Fm].Height;
- w:=Undo_Buffer[Current_Fm].Width;
- Undo_Buffer[Current_Fm].Canvas.CopyRect(Rect(0,0,w,h),
- Fm_pic[Current_Fm].pic.Canvas,Rect(0,0,w,h));
-
- L:=SpinEdit1.Value;
- For s:=1 to l do begin
- FilterBuffer.Width:=Fm_pic[Current_Fm].pic.Picture.Bitmap.Width;
- FilterBuffer.Height:=Fm_pic[Current_Fm].pic.Picture.Bitmap.Height;
- FilterBuffer.Canvas.CopyRect(Rect(0,0,w,h),
- Fm_pic[Current_Fm].pic.Canvas,Rect(0,0,w,h));
-
- for m:=1 to h do
- for n:=1 to w-1 do
- begin
- t:=1;
-
- for i:=1 to 3 do
- for j:=1 to 3 do
- if ((n-1+i)>=1)and((m-1+j)>=1)and((n-1+i)<=w)and((m-1+j)<=h) then
- begin
-
- c:=FilterBuffer.Canvas.Pixels[n-2+i,m-2+j];
-
- r:= (c mod $00000100);
- g:= ((c mod $00010000) div $00000100);
- b:= ((c mod $01000000) div $00010000);
- MasR[t]:=r;
- MasG[t]:=g;
- MasB[t]:=b;
- t:=t+1;
- end;
- sr:=0;
- sg:=0;
- sb:=0;
- for i:=1 to t-1 do
- begin
- sR:=sR+MasR[i];
- sG:=sG+MasG[i];
- sB:=sB+MasB[i];
- end;
-
-
- n_col:=$00010000*round(sB/(t-1))+$00000100*round(sG/(t-1))+round(sR/(t-1));
-
- Fm_Pic[Current_Fm].Pic.Canvas.Pixels[n,m+1]:=n_col;
-
- end;
- end;
-
 |
Вопрос задала: Вирра (статус: Посетитель)
Вопрос отправлен: 4 декабря 2009, 02:30
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|