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;