Doble klik button Low Pass Filter Di bawah private tulis program tertulis huruf tebal berikut:

type TFormLowPassFilter = classTForm Image1: TImage; Image2: TImage; btOpen: TButton; OpenPictureDialog1: TOpenPictureDialog; btLowPassFilter: TButton; btExit: TButton; procedure btOpenClickSender: TObject; procedure btLowPassFilterClickSender: TObject; procedure btExitClickSender: TObject; private procedure LowPassFilter; public { Public declarations } end; var FormLowPassFilter: TFormLowPassFilter; FileNameImg: string; implementation {R .dfm} uses UnitImageProses; procedure TFormLowPassFilter.btOpenClickSender: TObject; begin if OpenPictureDialog1.Execute then begin FileNameImg := OpenPictureDialog1.FileName; Caption := LowPassFilter : + OpenPictureDialog1.FileName; Image1.Picture.LoadFromFile OpenPictureDialog1.FileName; Image2.Visible := False; end; end; procedure TFormLowPassFilter.btLowPassFilterClickSender: TObject; begin Image2.Visible := True; Image2.Picture.Graphic := Image1.Picture.Graphic; LowPassFilter; end; procedure TFormLowPassFilter.LowPassFilter; const LowPassFilter : array[0..1,0..2,0..2] of smallint= 1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0; var row:array[0..8] of pbytearray; col:pbytearray; x,y:smallint; i,j,k,p:smallint; image:tbitmap; sum,jum:longint; begin p:=-120; image:=Tbitmap.Create; image.AssignImage1.Picture.Bitmap; for y:=1 to Image1.Height-2 do begin for i:=-1 to 1 do row[i+1]:=image.ScanLine[y+i]; col:=Image1.Picture.Bitmap.ScanLine[y]; x:=3; repeat sum:=0; for i:=-1 to 1 do for j:=-1 to 1 do sum:=sum+LowPassFilter[0,i+1,j+1]row[i+1,x+j3]; jum:=0; for i:=-1 to 1 do for j:=-1 to 1 do jum:=jum+LowPassFilter[1,i+1,j+1]row[i+1,x+j3]; sum:=sum+jum+p; if sum255 then sum:=255; if sum0 then sum:=0; for k:=0 to 2 do col[x+k]:=sum; incx,3; until x=3Image1.Width-4; end; Image2.picture.bitmap:=Image1.Picture.Bitmap; image.free; end; procedure TFormLowPassFilter.btExitClickSender: TObject; begin FormLowPassFilter.Close; end; end. unit UnitImageProses; interface uses WINPROCS, Graphics, ExtCtrls, ComCtrls, Variants; type TFreqHist = array [0..255] of longint; TMatrixFilter = array [1..16,1..16] of real; function RgbToGray Clr:TColor : byte; function ImgGetGray var Image:TImage; x,y:integer : byte; procedure ImgConvertToGrayscale var Image1:TImage; var ProgressBar1: TProgressBar; implementation const PercentR = 0.299; PercentG = 0.587; PercentB = 0.114; function ByteRange r:double : byte; begin if r0 then ByteRange:=0 else if r255 then ByteRange:=255 else ByteRange:=Roundr; end; function RgbToGray Clr:TColor : byte; var r,g,b:byte; begin r := GetRValueClr; g := GetGValueClr; b := GetBValueClr; RgbToGray := ByteRange rPercentR + gPercentG + bPercentB; end; function ImgGetGray var Image:TImage; x,y:integer : byte; begin Result := RgbToGray Image.Canvas.Pixels[x,y]; end; procedure ImgConvertToGrayscale var Image1:TImage; var ProgressBar1: TProgressBar;