Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.01.2008, 00:05
Kikky Kikky вне форума
Прохожий
 
Регистрация: 09.01.2008
Сообщения: 7
Репутация: 10
Печаль Удаление шумов. Помогите!!!

Помогите пожалуйста! Мне надо срочно написать программу на ДЕЛФИ, но я абсолютно не знаю как!
ЗАДАНИЕ: Удаление шумов на изображении. (например на БМП-картинке).
Подозреваю, что с помощью Рядов Фурье. Но могу и ошибаться. Мне сказали, что это программа в 15 строк, не больше. Типа отрываем файл, пропускаем через фильтр и перезаписываем в другой файл. Но КАК это сделать?? Я понимаю, что элементарно, но извините, я ни БУМ-БУМ в этом вообще! Если вам не сложно, напишите мне плиз прогу. Буду очень признательна!!!
Ответить с цитированием
  #2  
Старый 10.01.2008, 18:30
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

У меня есть код сглаживания:
Код:
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;
Думаю, должно подойти.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #3  
Старый 10.01.2008, 20:29
Kikky Kikky вне форума
Прохожий
 
Регистрация: 09.01.2008
Сообщения: 7
Репутация: 10
По умолчанию

Спасибо огромное! Только можете немного объяснить что к чему в коде? А то я совсем не понимаю
Ответить с цитированием
  #4  
Старый 11.01.2008, 11:51
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Забыл. Надо еще и класс 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;
И в uses добавить Math
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #5  
Старый 14.01.2008, 01:20
Kikky Kikky вне форума
Прохожий
 
Регистрация: 09.01.2008
Сообщения: 7
Репутация: 10
По умолчанию

А кто-то может прогу целиком написать? ПЛИИИЗЗЗ!!!!!!!!!
Ответить с цитированием
  #6  
Старый 14.01.2008, 12:29
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Пожалуйста.
Вложения
Тип файла: zip DeleteNoise.zip (2.5 Кбайт, 46 просмотров)
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #7  
Старый 15.01.2008, 00:20
Kikky Kikky вне форума
Прохожий
 
Регистрация: 09.01.2008
Сообщения: 7
Репутация: 10
По умолчанию

СПАСИБО ГРОМАДНЕЙШЕЕ!!!! ТОЛЬКО У МЕНЯ ВЫДАЕТ ОШИБКУ((( Я тебе там в аське все написала. А ты можешь построчно мне объяснить? Сносочки сделать))
Ответить с цитированием
  #8  
Старый 16.01.2008, 17:07
Kikky Kikky вне форума
Прохожий
 
Регистрация: 09.01.2008
Сообщения: 7
Репутация: 10
По умолчанию

КТО-НИБУДЬ помогите с объяснением!!! Очень надо!!! ПЛИЗ!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:09.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025