Doble klik button open kemudian ketik program yang di hurup tebal

38. Hasilnya sebagai berikut. Gambar 5.20 Hasil SaveUnitImageProses

39. Ketik program berikut ke dalam UnitImageProses.

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; procedure ImgHistogramCut var Image:TImage; nRepeat:integer; 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; var x,y:integer; ClrGray:byte; begin ProgressBar1.Max := Image1.Width-1; ProgressBar1.Position := 0; for x:=0 to Image1.Width-1 do begin for y:=0 to Image1.Height-1 do begin ClrGray := ImgGetGray Image1,x,y; Image1.Canvas.Pixels[x,y] := RGB ClrGray,ClrGray,ClrGray; end; Image1.Repaint; ProgressBar1.Position := x; end; end; procedure ImgHistogramCut var Image:TImage; nRepeat:integer; var ProgressBar1: TProgressBar; const BLACK_THRES=2; var x,y,i,counter:integer; clrGray,clrGrayMax:byte; Freq: TFreqHist; TotFreq, ImgSize: longint; thres: real; begin ProgressBar1.Max := Image.Width-1; ProgressBar1.Position := 0; for counter:=1 to nRepeat do begin for i:=0 to 255 do Freq[i]:=0; ImgSize := 0; clrGrayMax := 0; for x:=0 to Image.Width-1 do for y:=0 to Image.Height-1 do begin clrGray := ImgGetGray Image,x,y; Inc Freq[ClrGray]; if clrGrayBLACK_THRES then begin IncImgSize; if clrGrayclrGrayMax then clrGrayMax := clrGray; end; end; { tentukan threshold } TotFreq := 0; thres := 255; for i:=255 downto 0 do begin Inc TotFreq, Freq[i]; if TotFreqImgSize2 then begin thres := i; break; end; end; { tuliskan pixel baru } ProgressBar1.Position := 0; for x:=0 to Image.Width-1 do begin for y:=0 to Image.Height-1 do begin ClrGray := ImgGetGray Image,x,y; if clrGray=thres then Image.Canvas.Pixels[x,y] := RGB 0,0,0 else begin clrGray := ByteRange clrGrayclrGrayMax255; Image.Canvas.Pixels[x,y] := RGB clrGray,clrGray,clrGray; end; end; ProgressBar1.Position := x;