![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Помогите пожалуйста! Мне надо срочно написать программу на ДЕЛФИ, но я абсолютно не знаю как!
ЗАДАНИЕ: Удаление шумов на изображении. (например на БМП-картинке). Подозреваю, что с помощью Рядов Фурье. Но могу и ошибаться. Мне сказали, что это программа в 15 строк, не больше. Типа отрываем файл, пропускаем через фильтр и перезаписываем в другой файл. Но КАК это сделать?? Я понимаю, что элементарно, но извините, я ни БУМ-БУМ в этом вообще! Если вам не сложно, напишите мне плиз прогу. Буду очень признательна!!! |
|
#2
|
||||
|
||||
|
У меня есть код сглаживания:
Код:
procedure AntiAliasRect(clip: tbitmap; XOrigin, YOrigin, XFinal, YFinal: Integer);
var
Memo, x, y : Integer; (* Composantes primaires des points environnants *)
p0, p1, p2 : pbytearray;
SL : TScanlines;
begin
if XFinal<XOrigin then begin Memo := XOrigin; XOrigin := XFinal; XFinal := Memo; end; (* Inversion des valeurs *)
if YFinal<YOrigin then begin Memo := YOrigin; YOrigin := YFinal; YFinal := Memo; end; (* si diff,rence n,gative*)
XOrigin := max(1,XOrigin);
YOrigin := max(1,YOrigin);
XFinal := min(clip.width-2,XFinal);
YFinal := min(clip.height-2,YFinal);
clip.PixelFormat := pf24bit;
SL := TScanlines.Create(clip);
try
for y := YOrigin to YFinal do begin
//p0 := clip.ScanLine [y-1];
//p1 := clip.scanline [y];
//p2 := clip.ScanLine [y+1];
p0 := PByteArray(SL[y-1]);
p1 := PByteArray(SL[y]);
p2 := PByteArray(SL[y+1]);
for x := XOrigin to XFinal do begin
p1[x*3] := (p0[x*3]+p2[x*3]+p1[(x-1)*3]+p1[(x+1)*3])div 4;
p1[x*3+1] := (p0[x*3+1]+p2[x*3+1]+p1[(x-1)*3+1]+p1[(x+1)*3+1])div 4;
p1[x*3+2] := (p0[x*3+2]+p2[x*3+2]+p1[(x-1)*3+2]+p1[(x+1)*3+2])div 4;
end;
end;
finally
SL.Free;
end;
end; |
|
#3
|
|||
|
|||
|
Спасибо огромное!
Только можете немного объяснить что к чему в коде? А то я совсем не понимаю![]() |
|
#4
|
||||
|
||||
|
Забыл. Надо еще и класс TScanlines создать.
Код:
type
TScanlines = class
private
FScanLine0 : PByte;
FScanLineIncrement : integer;
FMaxRow : integer;
function GetRowPtr(Index: integer): PByte;
public
constructor Create(Bitmap: TBitmap);
destructor Destroy; override;
property RowPtr[Index: Integer]: PByte read GetRowPtr; default;
end;
...
implementation
...
constructor TScanlines.Create(Bitmap: TBitmap);
begin
inherited Create;
FScanLine0 := nil;
FScanLineIncrement := 0;
FMaxRow := 0;
if Bitmap <> nil then begin
FScanLine0 := Bitmap.ScanLine[0];
FScanLineIncrement := integer(Bitmap.Scanline[1]) -integer(FScanLine0);
FMaxRow := Bitmap.Height;
end;
end;
destructor TScanlines.Destroy;
begin
inherited;
end;
function TScanlines.GetRowPtr(Index: integer): PByte;
begin
if (Index >= 0) and (Index < FMaxRow) then begin
result := FScanLine0;
Inc(result, FScanLineIncrement *Index);
end else
result := nil;
end;Код:
procedure TForm1.Button1Click(Sender: TObject); begin AntiAliasRect(Image1.Picture.Bitmap, 0, 0, Image1.Width, Image1.Height); //Чтобы все работало, надо на форму добавить кнопку (TButton) и изображение (TImage) end; |
|
#5
|
|||
|
|||
|
А кто-то может прогу целиком написать? ПЛИИИЗЗЗ!!!!!!!!!
|
|
#6
|
||||
|
||||
|
Пожалуйста.
![]() |
|
#7
|
|||
|
|||
|
СПАСИБО ГРОМАДНЕЙШЕЕ!!!! ТОЛЬКО У МЕНЯ ВЫДАЕТ ОШИБКУ((( Я тебе там в аське все написала. А ты можешь построчно мне объяснить? Сносочки сделать))
![]() |
|
#8
|
|||
|
|||
|
КТО-НИБУДЬ помогите с объяснением!!! Очень надо!!! ПЛИЗ!!!
![]() |