memo1.Clear; for j:=0 to gambar.Height-1 do
begin temp:=gambar.ScanLine[j];
i:=0; repeat
writeF,inttostrtemp[i]+ ; i:=i+1;
until i =3gambar.Width-1; end;
closeFileF; memo1.Lines.LoadFromFileAgungFile;
image1.Picture.Bitmap:=gambar;end;
10. Kemudian dengan cara yang sama pilih menu file, Menampilkan Nilai Intensitas Pixel Hasil, lalu ketik program berikut.
procedure TFormHistogramCut.MenampilkanNilaiIntensitasPixelHasil1Click Sender: TObject;
var F2 : TextFile;
AgungFile2: String; temp : PByteArray;
i,j : integer; gambar2 :TBitmap;
begin AgungFile2:=nilai intensitas pixel hasil.txt;
AssignFileF2,AgungFile2; gambar2:=TBitmap.Create;
gambar2:=image2.Picture.Bitmap; rewriteF2;
writelnF2,Matrik dirancang oleh Agung BALI; memo2.Clear;
for j:=0 to gambar2.Height-1 do begin
temp:=gambar2.ScanLine[j]; i:=0;
repeat writeF2,inttostrtemp[i]+ ;
i:=i+1; until i =3gambar2.Width-1;
end; closeFileF2;
memo2.Lines.LoadFromFileAgungFile2; image2.Picture.Bitmap:=gambar2;
end;
11. Simpan program dengan cara save all. 12. Compile program dengan cara project compiler.
13. Jalankan program dengan cara Run.
14. Lihat hasilnya seperti berikut.
Gambar 14.14 Hasil Program Menampilkan Nialai Intensitas Pixel
14.3 PROGRAM SELENGKAPNYA ADALAH SEBAGAI BERIKUT:
unit UnitHistogramCut; interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtDlgs, StdCtrls, ExtCtrls, ComCtrls, Menus; type
TFormHistogramCut = classTForm Image1: TImage;
Image2: TImage; btOpen: TButton;
OpenPictureDialog1: TOpenPictureDialog; btHistogramCut: TButton;
ProgressBar1: TProgressBar; btExit: TButton;
EditHistogramCut: TEdit; Label1: TLabel;
MainMenu1: TMainMenu; File1: TMenuItem;
MenampilkanNilaiIntensitasPixelAwal1: TMenuItem; MenampilkanNilaiIntensitasPixelHasil1: TMenuItem;
Memo1: TMemo; Memo2: TMemo;
procedure btOpenClickSender: TObject; procedure btHistogramCutClickSender: TObject;
procedure btExitClickSender: TObject; procedure MenampilkanNilaiIntensitasPixelAwal1ClickSender: TObject;
procedure MenampilkanNilaiIntensitasPixelHasil1ClickSender: TObject; private
{ Private declarations } public
{ Public declarations } end;
var FormHistogramCut: TFormHistogramCut;
FileNameImg: string; implementation
{R .dfm} uses
UnitImageProses; procedure TFormHistogramCut.btOpenClickSender: TObject;
begin if OpenPictureDialog1.Execute then
begin FileNameImg := OpenPictureDialog1.FileName;
Caption := Histogram Cut : + OpenPictureDialog1.FileName; Image1.Picture.LoadFromFile OpenPictureDialog1.FileName;
Image2.Visible := False; end;
end; procedure TFormHistogramCut.btHistogramCutClickSender: TObject;
var thres:real; n:integer;
begin Image2.Visible := True;
Image2.Picture.Graphic := Image1.Picture.Graphic; n:= StrToIntDefEditHistogramCut.Text,5;
ImgHistogramCut Image2, n, ProgressBar1; end;
procedure TFormHistogramCut.btExitClickSender: TObject; begin
FormHistogramCut.Close; end;
procedure TFormHistogramCut.MenampilkanNilaiIntensitasPixelAwal1Click Sender: TObject;
var F : TextFile;
AgungFile: String; temp : PByteArray;
i,j : integer; gambar :TBitmap;
begin AgungFile:=nilai intensitas pixel awal.txt;
AssignFileF,AgungFile; gambar:=TBitmap.Create;
gambar:=image1.Picture.Bitmap; rewriteF;
writelnF,Matrik dirancang oleh Agung Gunawan; memo1.Clear;
for j:=0 to gambar.Height-1 do begin
temp:=gambar.ScanLine[j]; i:=0;
repeat writeF,inttostrtemp[i]+ ;
i:=i+1; until i =3gambar.Width-1;
end; closeFileF;
memo1.Lines.LoadFromFileAgungFile; image1.Picture.Bitmap:=gambar;
end; procedure TFormHistogramCut.MenampilkanNilaiIntensitasPixelHasil1Click
Sender: TObject; var
F2 : TextFile; AgungFile2: String;
temp : PByteArray;
i,j : integer; gambar2 :TBitmap;
begin AgungFile2:=nilai intensitas pixel hasil.txt;
AssignFileF2,AgungFile2; gambar2:=TBitmap.Create;
gambar2:=image2.Picture.Bitmap; rewriteF2;
writelnF2,Matrik dirancang oleh Agung BALI; memo2.Clear;
for j:=0 to gambar2.Height-1 do begin
temp:=gambar2.ScanLine[j]; i:=0;
repeat writeF2,inttostrtemp[i]+ ;
i:=i+1; until i =3gambar2.Width-1;
end; closeFileF2;
memo2.Lines.LoadFromFileAgungFile2; image2.Picture.Bitmap:=gambar2;
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; 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 clrGraythres 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; end;
end; Image.Repaint;
end; end.
BAB 15 LOG IN
15.1 PENDAHULUAN
Untuk membuat program aplikasi sebaiknya menggunakan Log In. Tujuanya adalah program aplikasi tersebut hanya bisa dipakai oleh operator tertentu.
15.2 CARA MEMBUAT PROGRAM LOG IN ADALAH SEBAGAI BERIKUT.
1. Buka program delphi, dengan cara pilih menu start, program borland delphi 7, delphi 7.
Gambar 15.1 Start Program
2. Kemudian pilih menu file, new, application.
Gambar 15.2 New Application
3. Pada object inspector, ubah properti captionnya dengan nama Log In, dan namenya dengan nama FormLogIn.
Gambar 15.3 Form LogIn
4. Tambahkan label 1 pada form ubah properti captionnya dengan nama User Name, tambahkan label 2 pada form ubah properti captionnya dengan nama
Pasword, tambahkan edit 1 pada form, kemudian hapus teksnya pada property Teks, tambahkan edit 2 pada form, kemudian hapus teksnya pada
property Teks, dan pada properties PasswordCharnya ganti dengan bintang .
Gambar 15.4 Tambah Edit ke Form
5. Tambahkan button 1 pada form kemudian ubah captionya dengan nama Log In dan berinama Namenya dengan nama btLogIn, Tambahkan button 2 pada
form kemudian ubah captionya dengan nama Exit dan berinama Namenya dengan nama btExit.
Gambar 15.5 Tambah Button ke Form
6. Tambahkan form lagi dengan cara klik menu file new form.
Gambar 15.6 New Form
7. Ubah captionya dengan nama Aplikasi dan namenya dengan nama FormAplikasi.
Gambar 15.7 Form Aplikasi
8. Simpan filenya dengan cara file save all.
Gambar 15.8 Menu Save All
9. Berinama unit1 dengan nama UnitLogIn dan unit2nya dengan nama UnitAplikasi dan projectnya dengan nama ProjectLogIn.
Gambar 15.9 Save UnitLogIn
10. Pilih form Aplikasi kemudian Klik menu file kemudian Use Unit Alt + F11.
Gambar 15.10 Use Unit
11. Tekan Ok. Pada form aplikasi use unitnya adalah UnitLogIn.
Gambar 15.11 Mengelingkan Form Aplikasi Dengan UnitLogIn
12. Pilih form Log In, kemudian klik menu file, Use Unit Alt + F11 lalu tekan ok, pada form Log In use unitnya adalah Unit Aplikasi.
Gambar 15.12 Mengelingkan UnitLogIn Dengan Form Aplikasi 13. Pilih form Log In, lalu doble klik button Log In, kemudian ketik program
berikut: procedure TFormLogIn.btLogInClickSender: TObject;
begin if Edit1.Text=username and Edit2.Text=pasword then
begin MessageBox0,Log In
Sukses,information,MB_OK+MB_ICONINFORMATION; FormLogIn.Hide;
FormAplikasi.Show; end
else MessageBox0,Log In Gagal,error,MB_OK+MB_ICONERROR;
end;
14. Doble klik button Exit lalu ketik program berikut:
procedure TFormLogIn.btExitClickSender: TObject; begin
FormLogIn.Close; end;
15. Simpan programnya dengan cara save all.
16. Kemudian compile program dengan cara pilih menu project, compile
projectLogIn.
Gambar 15.13 Compiler ProjectLogIn
17. Jalankan program dengan cara pilih menu Run, run atau tekan tanda panah
hijau.
Gambar 15.14 Menu Run
18. Lalu masukan tulisan username dan password, Hasilnya adalah sebagai
berikut: