Aplikasi Grafika Komputer Memakai Lazarus

APLIKASI GRAFIKA KOMPUTER

MENGGUNAKAN LAZARUS



APLIKASI GRAFIKA KOMPUTER MENGGUNAKAN LAZARUS APLIKASI GRAFIKA KOMPUTER MENGGUNAKAN LAZARUS
 














Tugas Mata Kuliah
GRAFIKA KOMPUTER
KELAS B
Semester Genap TA. 2011/2012



Oleh:

1. Yoga Permana                              123090170              (Ketua)
2. Alhamdia Prananto                       123090193             (Anggota)
3. Cahyo Budi Wicaksono                123090157              (Anggota)
4. Zakaria Annas                              123090182               (Anggota)





JURUSAN TEKNIK INFORMATIKA

FAKULTAS TEKNOLOGI INDUSTRI

UNIVERSITAS PEMBANGUNAN NASIONAL ”VETERAN”

YOGYAKARTA

2012





HALAMAN PENGESAHAN PRESENTASI



APLIKASI GRAFIKA KOMPUTER

MENGGUNAKAN LAZARUS





Disusun oleh:
KELOMPOK  10

Nama
No.Mhs.
Tanda Tangan
Yoga Permana                (Ketua)
123090170

Alhamdia Prananto        (Anggota)
123090193

Cahyo Budi Wicaksono (Anggota)
123090157

Zakaria Annas                (Anggota)
123090182



telah dipresentasikan pada tanggal 27 Juni 2012


Menyetujui
Dosen Pengampu




Herry Sofyan, S.T., M.Kom







BAB I
PENDAHULUAN
1.1.Latar Belakang
Kemajuan teknologi pada ketika ini memungkinkan insan untuk tidak menggambarkan memakai media kertas. Dengan adanya kebutuhan insan yang semakin meningkat dan harapan untuk mendapatkan sebuah hasil yang lebih manis dan cepat, maka di buat banyak sekali agenda aplikasi untuk sanggup memungkinkan insan menggambarkan memlalui media komputer.
      Namun, tidak hanya agenda aplikais yang dikhususkan untuk menggambar grafik saja yang sanggup menggambar grafik. Akan tetapi bahasa pemrogramanpun sanggup melaksanakan proses menggambar grafik, salah satunya yaitu, Turbo pascal, C , Lazarus dan yang lainnya.

1.2.Rumusan Masalah
Berdasarkan latar belakang duduk kasus yang ada maka sanggup dirumuskan masalahnya yaitu bagaimana membangun sebuah aplikasi Paint.

1.3.Batasan Masalah
Laporan ini hanya akan membahas antara lain ihwal :
a.       Konsep dasar menggambar Transformasi 2 Dimensi grafik di dalam komputer dan mentranslasikan.
b.      Konsep dasar rotasi pada sebuah bidang 2 dimensi.
c.       Konsep dasar menggeser sebuah bangun 2 dimensi.
d.      Konsep dasar scaling sebuah objek 2 dimensi.
e.       Fasilitas yang di gunakan untuk menciptakan aplikasi Paint memakai bahasa pemrograman ialah Lazarus.

1.4.Tujuan Tugas Projek
Tujuan kiprah projek ini yaitu membangun aplikasi garafika komputer.



1.5. Manfaat Tugas Projek
Manfaat dari aplikasi yang di buat untuk pengguna(user) yaitu mempermudah si pengguna untuk menggambar bangun 2 dimensi atau 3 dimensi, mewarnai sebuah bangun, dll.

1.6  Sistematika Penulisan
              Untuk membantu dan memahami isi serta uraian penelitian, sesuai dengan judul yang dimaksud perlu kiranya menyusun sistematika laporan  kerja praktek sebagai berikut :
BAB I        Pendahuluan
Bab ini menguraikan ihwal Latar Belakang Masalah, Perumusan Masalah, Batasan Masalah, Tujuan Tugas Projek, Manfaat Tugas Projek, Sistematika Penulisan.
BAB II       Teori Dasar
Merupakan bab yang berisikan kajian ihwal sistem informasi yang berafiliasi dengan duduk kasus yang diteliti.

BAB III     Perancangan Aplikasi
Bab ini berisi ihwal perancangan aplikasi yanga akan di buat
BAB IV     Implementasi Program
Bab ini berisi ihwal implementasi dari hasil rancangan disertai referensi data yang di input.
BAB V       Kesimpulan dan Saran
Bab ini berisikan kesimpulan dan saran dari  hasil menciptakan laporan ini.
DAFTAR PUSTAKA









BAB II
TEORI DASAR
2.1 GRAFIKA KOMPUTER
            Grafika Komputer yaitu sebuah teknologi visualisasi berbasis komputer yang bisa menghasilkan gambar-gambar dengan persepsi 3D pada layar 2D. Selain itu bisa juga di arti kan sebagai seperangkat alat yang terdiri dari hardware dan software untuk menciptakan gambar grafik atau gambaran realistic untuk seni, game komputer, foto dan film animasi. Istilah ”Grafik Komputer”ditemukan tahun 1960 oleh William Fetter : pembentukan disain model cockpit (Boeing) dengan memakai pen plotter dan referensi model badan insan 3 Dimensi.
            Grafika Komputer intinya yaitu suatu bidang komputer yang memelajari cara-cara meningkatkan dan memudahkan komunikasi antara insan dengan mesin (komputer) dengan jalan membangkitkan, menyimpan, dan memanipulasi gambar model suatu obyek mengunakan komputer. Grafika Komputer memungkinkan kita untuk berkomunikasi lewat gambar-gambar, bagan-bagan, dan diagram-diagram.

2.2 SISTEM GRAFIKA
2.2.1    Teknologi Display
Penggunaan alat utama untuk menampilkan output pada sistem grafika yaitu video monitor. Pada umumnya memakai perancangan cathode-ray-tube (CRT).
Adapun operasinya secara garis besar yaitu :
a.       Sebuah electron gun memancarkan electron melalui sistem focusing, dan deflection sistem (sistem untuk mengatur pembelokan) sehingga pancaran elektron mencapai posisi tertentu dari lapisan tertentu pada layer.
b.      Fosfor memancarkan sinar kecil pada setiap posisi yang berafiliasi dengan pancaran electron. Sinar yang dipancarkan fosfor cepat hilang, maka diharapkan suatu pengaturan semoga fosfor tetap menyala, caranya yaitu dengan refreshing yakni menembakkan elektron berulang kali pada posisi yang sama.
c.       Jumlah titik maksimum yang sanggup ditampilkan pada monitor tanpa tumpang tindih dinamakan resolusi. Resolusi yaitu jumlah titik per centimeter yang sanggup ditempatkan berdasarkan arah horizontal dan vertical.
d.      Resolusi CRT tergantung pada tipe fosfor, intensitas yang ditampilkan, focusing gun deflection sistem.
e.        Aspect rasio merupakan property dari video monitor. Misalkan aspect ratio ¾, artinya perbandingan jumlah titik vertikal dan horisontal yang sanggup ditampilkan yaitu ¾.

2.2.2    Raster-Scan System
a.       Jenis monitor grafika dengan CRT yang paling umum yaitu raster-scan display.
b.      Pancaran elektronnya bergerak ke seluruh layer baris per baris dari atas ke bawah
c.       Definisi gambar disimpan dalam memori yang dikenal dengan refresh buffer atau frame buffer.
d.      Setiap titik pada layer merupakan suatu pixel (picture element)
e.       Monitor hitam-putih mempunyai nilai 0 dan 1, tiap pixel 1 bit. Frame buffer disebut bitmap.
f.       Sistem high quality memakai 12 bit untuk menyimpan informasi dalam 1 pixel. Menghasilkan resolusi 1024x1024 dan frame buffernya sebesar 3 MB. Frame buffernya disebut pixmap
g.      Refreshing pada raster-scan display mempunyai 60-80 frame per detik.
h.      Kembalinya scan pada bab kiri layar sehabis refreshing tiap scan line dinamakan dengan horizontal trace.
i.        Pada simpulan tiap frame (1/80 hingga 1/60 tiap detik ) pancaran electron yang kembali ke atas dinamakan dengan vertical retrace.
j.        Biasanya setiap frame ditampilkan dalam dua tahap memakai mekanisme interlaced refresh. Tahap pertama, pancaran electron menyalin berdasarkan scan line dari atas ke bawah. Tahap kedua, vertical retrace, pancaran elektoron menyisir sisa scan line.

2.2.3    Random-Scan System
a.       Pancaran diarahkan hanya kebagian layar dimana gambar dibuat
b.      Hanya menciptakan gambar dengan satu garis pada suatu ketika (vector display), stroke writing atau kaligrafik display
c.       Komponen garis sanggup digambarkan dan dilakukan refreshing oleh random-scan sistem.
d.      Dirancang untuk menciptakan seluruh komponen garis dengan rate antara 30 hingga 60 tiap detik.
e.       Hanya dirancang untuk aplikasi line drawing dan tidak sanggup menampilkan raster drawing
f.        
2.3 OUTPUT PRIMITIF
            Output/Grafis primitif yaitu bentuk geometri dasar yang sanggup dipakai untuk membentuk obyek yang lebih komplek. Dengan memasukkan output primitif tersebut sebagai stuktur yang lebih kompleks. Setiap output primitif mempunyai data koordinat dan informasi lain ihwal bagaimana cara object ditampilkan pada layar. Titik dan garis lurus yaitu bentuk geometri paling sederhana dan komponen gambar.
            Borland C++ Builder menyediakan Canvas yang sanggup dipakai untuk menampilkan gambar maupun goresan pena ke layar. Kelas Canvas pada umumnya merupakan atribut dari kelas Lain. Beberapa kelas yang mempuntai atribut Canvas antara lain TPaintBox, TShape.

2.3.1    Titik dan Garis
a. Titik(Pixel)
Titik merupakan satuan gambar/grafis yang terkecil. Dengan menggambar titik maka kita sanggup menggambar obyek apapun. Termasuk bentuk geometri dibawah merupakan bentuk- bentuk yang intinya berasal dari titik-titik. Operasi titik ini sering dipakai pada pengolahan gambaran (Image processing). Setiap titik pada monitor mempunyai parameter koordinat dan warna.
Kode untuk menggambar titik :
Canvas-> Pixels[x][y] = warna
Dengan
x : koordinat mendatar
y : koordinat vertikal
Warna  : warna pixel
Contoh : Canvas->Pixel [100][100] = clRed

b. Garis(line)
Garis yaitu kumpulan titik-titik/pixel yang tersusun secara lurus dan linier dari titik awal hingga titik akhir.
Kode :
Canvas->MoveTo(x0, y0);
Canvas->MoveTo(x1, y1);
Canvas->LineTo(xn, yn)

2.3.2    Algoritma Pembentukan Garis
Garis merupakan kumpulan dari titik-titik, untuk membentuk garis lurus yaitu dengan mengetahui titik awal dan titik akhir. Dengan mengetahui titik awal dan titik simpulan maka kita sanggup membentuk garis. Untuk menggambarkan proses pembuatan garis dari titik awal ke titik simpulan ada banyak sekali algoritma. Algoritam yang umum yaitu DDA dan Bresenham.

a. Berikur ini yaitu algoritma DDA :
1. Tentukan 2 buah titik.
2. Tentukan yang menjadi titik awal (X0,Y0) dan titik simpulan (X1,Y1).
3. Hitung Dx dan DyDx = X1-X0 dan Dy = Y1 – Y0
4. Bandingkan Abs(Dx) dan Abs(Dy)Jika Abs(Dx) > Abs(Dy) makaSteps = Abs(Dx) bila tidak Steps = Abs(Dy)
5. Hitung penambahan koordinat pixel, yaitu:X_increment = dx/steps, danY_increment = dy/steps.
6. Koordint selanjutnya, yaituX+X_incrementY+Y_increment
7. Posisi pixel ditentukan dengan pembulatan nilai koordinat tersebut.
8. Ulangi langkah 6 dan 7 untuk posisi selanjutnya hingga X = X1, Y = Y1.

b. Berikur ini yaitu algoritma BRESSENHAM :
Tujuan dari algoritma Bressenham ini yaitu untuk menghindari pembulatan nilai ibarat pada algoritma DDA.
1. Tentukan dua titik yang akan dihubungkan dalam pembentukan garis.
2. Tentukan salah satu titik di sebelah kiri sebagai titi awal, yaitu (x0,y0) dan titik lainnya sebgai titik simpulan (x1,y1).
3. Hitung dx,dy,2dx dan 2dy-2dx.
4. Hitung parameter P0 = 2dy-dx
5. Untuk setiap Xk sepanjang jalur garis, dimulai dengan k=0,bila pk <0,>k+1, yk), dan Pk+1 = Pk+2dybila tidak, maka titik selanjutnya yaitu (xk+1,yk+1), dan Pk+1 = Pk+2dy-2dx
6. Ulangi langkah no 5 untuk menentukan posisi pixel selanjutnya, hingga x = x1 dan y = y1.

2.3.3    Algoritma Pembentukan Lingkaran dan elipse
a.  Algoritma Pembentukan Lingkaran
ecara umum mekanisme pembentuk lingkaran dibentuk dengan rumus dasar x2+y2=R2. Terdapat beberapa cara untuk membentuk suatu lingkaran namun tidak efisien. Lingkaran sanggup dibentuk dengan menggambarkan seperempat lingkaran alasannya bab lain sanggup dibentuk sebagai bab yang simetris.
1.      Algoritma Simetris delapan titik
Pada algoritma ini pembuatan lingkaran dilakukan dengan menentukan satu titik awal. Bila titik awal pada lingkaran(x,y) maka terdapat tiga posisi lain, sehingga sanggup diperoleh delapan titik. Dengan demikian bekerjsama hanya diharapkan untuk menghitung segmen 45’ dalama menentukan lingkaran selengkapnya.
Dengan titik sentra lingkaran tertentu, delapan titik simetris sanggup ditampilkan dengan mekanisme Circle Point Sebagai berikut:
procedure CirclePoints(x, y, value:integer);
begin
putPixel(x,y,value);
putPixel(-x,y,value);putPixel(x,-y,value);
putPixel(-x,-y,value);
putPixel(y,x,value);
putPixel(-y,x,value);
putPixel(y,-x,value);
putPixel(-y,-x,value);
end;
2.      Algoritma Lingkaran Midpoint
Algoritma Lingkaran Midpoint juga disebut algoritma lingkaran Bressenham. Bressenham membuatkan generator lingkaran yang cukup efisien. Algoritma yang dipakai membentuk semua titik berdasarkan titik sentra dengan penambahan semua jalur sekeliling lingkaran. Algoritma ini diturunkan dari algoritma Midpoint untuk pembentukan garis. Dalam hal ini hanya diperhatikan bab 45’ dari suatu lingkaran, yaitu oktan kedua dari x=0 ke x=R/√2, dan memakai CirclePoints untuk menampilkan titik dari seluruh lingkaran. Langkah langkah untuk membentuk lingkaran algoritma Circle Midpoint:
1. Tentukan radius r dengan titk sentra lingkaran(xc,yc) kemudian diperoleh (x0,y0)=(0,r)
2. Hitung nilai dari parameter P0=5/4­r
3. Tentukan nilai awal k=0, untuk setiap posisi xk berlaku sebagai berikut:
Bila Pk< 0, maka titik selanjutnya yaitu (xk+1,yk))dan
Pk+1=Pk+2xk+1+1
Bila tidak, maka selanjutnya adalah(xk+1,yk­1), dan Pk+1=Pk+2xk+1+1­ 2yk+1
Dimana 2xk+1=2xk+2 dan 2yk+=2yk­2
4. Tentukan titik simetris pada ketujuh oktan yang lain5. Gerakkan setiap posisi pixel(x,y) pada garis melingkar dari lingkaran dengan titik sentra (xc,yc) dan tentukan nilai koordinat:
x=x+xcy=y+yc
6. Ulangi langkah ke­3 hingga 5, sehingga x>=y
b. Algoritma Pembentukan elipse
Elips merupakan modifikasi dari bentuk lingkaran, dengan memasukkan mayor dan minor axis pada mekanisme lingkaran. Elips ditentukan oleh satu set titik dengan memperhitungkan jumlah jarak dari kedua posisi(foci). Bila jarak ke kedua foci dari sembarang titik p(x,y) pada elips diberi label d1 dan d2, maka persamaan elips menjadi :
d1+d2=konstan
Untuk menggambarkan jarak d1 dan d2 dengan ketentuan koordinat masing masing
            F1(1(x1,1,y1) 1) 1) dan F2(2(X2,2,Y2)
Ö((xx1)2+(yy1)2)2+Ö((xx2)2+(yy2)2=konstan
Dimana mayor dan minor axis elips dalam posisi pararel dengan sumbu x dan sumbu y pada referensi ini, parameter rx disebut semi major axis dan ry disebut semi minor axis, sehingga persamaan elips dengan parameter rx dan ry menjadi :
((xrc)/rx)2 + ((yyc)/ry)2=1



Algoritma elips Midpoint
Untuk algoritma pembentukan elips, pendekatan yang dilakukan sama dengan penggunaan pada ketika menampilkan lingkaran. Dengan parameter untuk elips pada posisi standar, yaitu rx, ry, dan(xc,yc). Bila elips ditampilkan pada posisi standar, maka sanggup dilakukan dengan memutar elips tersebut menurun koordinat titik pusat, dan mendapatkan kembali mayor dan minor axis.
Metode midpoint untuk elips dijalankan pada kuadran pertama dalam dua bagian. Bagian pertama menrut kemiringan elips rx<ry. Penambahan dengan unit step pada arah sumbu x dilakukan bila slope lebih kecil dari 1, dan dengan unit step berdasarkan sumbu y bila kemiringan lebih besar dari 1.
Bagian 1 dan 2 sanggup dipakai untuk bermacam macam cara. Pertama dimulai dari posisi (0,ry) dan step searah jarum jam sepanjang jalur elips pada kuadran pertama. Pergeseran dengan unit step dalam x pada ketika slope lebih besar dari 1.
Alternatif lain, dimulai dari (rx,0) dan seleksi titik dalam arah berlawanan dengan arah jarum jam. Penggeseran unit step y ke unit step x pada ketika kemiringan lebih besar dari 1. dengan prosesor pararel, posisi pixel sanggup dihitung dalam dua bab sekaligus.

Pembentukan elips berdasarkan algoritma Circle midpoint sebagai berikut:
1.Tentukan rx,ry dan sentra elips (xc,yc) kemudian diperoleh (xo,yo)=(0,ry)
2.Hitung nilai parameter P10=ry2rx2 ry+1/4 rx2
3.Tentukan nilai awal k=0, untuk setiap posisi xk k berlaku sebagai berikut :
Bila p1k< 0 maka titik selanjutnya yaitu (xk+1, yk)
p1k+1k+1k+1=p1k+2ry2xk+1k+1k+1+ry2
Bila tidak, maka titik selanjutnya yaitu (xk+!,yk1) dan
p1k+1k+1k+1=p1k+2ry2xk+1k+1k+12rx yk+1k+1k+1+ry2
dengan
2ry2xk+1k+1k+1=2ry2xk k +2ry2
Dan
2rx yk+1k+1k+1=2rx2 yk k +2rx2
Teruskan hingga 2ry2x >= 2rx2 y
4.Tentukan nilai parameter pada bab kedua memakai titik terakhir (x0,y0 ) yang telah dihitung pada bab pertama, sebagai berikut :
P2k+1=k+1=k+1=k+1=2ry2 2 (xo+1/2)2+2rx2 2 (yo1)2rx2 ry2
5.Setiap posisi yk k pada bab kedua, dimulai dengan k=0
-    Bila p2k> 0 maka titik selanjutnya yaitu (xk, yk1)
p2k+1k+1k+1=p2k+2rx2yk+1k+1k+1+rx2
-          Bila tidak, maka titik selanjutnya yaitu (xk+1,yk1) dan
p2k+1k+1k+1=pk+2ry2xk+1k+1k+12rx yk+1k+1k+1+ry2
6.Tentukan titik simetris pada ketiga kuadran lainnya
7.Gerakkan setiap posisi(x,y) pada garis melingkar dari elisp dengan titik pusat(xc,yc) dan tentukan nilai koordinat
x=x+xc y=y+yc
8.Ulangi langkah untuk bab pertama di atas, sehingga 2ry2x >= 2rx2 y

2.3.4    Fill Area Primitif
            Fill area (pengisian area) output primitif standar pada paket aplikasi grafika pada umumnya yaitu warna solid atau pola raster. Terdapat dua dasar pendekatan untuk mengisi area pada raster sistem. Menentukan overlap interval untuk scan line yang melintasi area Dengan memulai dari titik tertentu pada posisi di dalam poligon. Berikut yaitu algoritma Fill Area  :
a.       Algoritma Boundary-Fill
Metode ini bermanfaat untuk paket aplikasi grafik interaktif, dimana titik dalam sanggup dengan gampang ditentukan. Prosedurnya yaitu mendapatkan input koordinat dari suatu titik (x,y), warna isi dan warna garis batas. Ada dua macam metode yaitu 4-connected dan 8-connected.

b.      Algoritma Flood-Fill
Metode ini dimulai pada titik (x,y) dan mendefinisikan seluruh pixel pada bidang tersebut dengan warna yang sama. Bila bidang yang akan diisi warna mempunyai beberapa warna, pertama-tama yang dilakukan yaitu menciptakan nilai pixel yang baru, sehingga semua pixel mempunyai warna yang sama.





2.4 ATRIBUT OUTPUT PRIMITIF
                  Pada umumnya, setiap parameter yang memberi efek pada output primitif ditampilkan sesuai dengan parameter atribut.
2.4.1    Atribut Kurva dan Garis
a. Atribut Garis
Atribut dasar untuk garis lurus yaitu style (tipe garis), width (tebal) dan color(warna). Dalam beberapa paket aplikasi grafik, garis sanggup ditampilkan dengan mengunakan Pen.

b. Atribut Kurva
Parameter untuk atribut kurva sama dengan atribut segmen garis. Kurva sanggup ditampilkan dengan banyak sekali warna, tebal, dot-dash(Style garis) dan pilihan pen atau brush. Selain itu untuk pengisian suatu bidang tertentu termasuk menentukan warna antara solid dan pattern tertentu dan menentukan warna pattern yang ada.

2.4.2    Warna dan Grayscale
Ketika suatu sistem menyediakan opsi warna, suatu parameter akan memperlihatkan
indeks warna awal yang dimasukkan ke dalam daftar nilai atribut sistem. suatu mekanisme
polyline kemudian akan menampilkan garis dengan warna tersebut dengan cara mengatur
warna tersebut d frame buffer pada lokasi piksel sepanjang garis tersebut dengan
menggunakan mekanisme setPixel.
a.       Warna
Pada system raster pilihan nomor warna bergantung pada jumlah bit yang tersedia  per pixel di frame buffer. Iformasi warna yang sanggup disimpan di frame buffer dengan dua cara yaitu :
1. instruksi warna disimpan secara eksklusif di frame buffer
2. instruksi warna disimpan di table warna yang terpisah dan gunakan nilai pixel
sebagai indeks ke table tersebut
Dengan memakai skema penyimpanan eksklusif ketika instruksi warna tertentu  dispesifikasikan pada suatu agenda aplikasi, nilai biner yang ditunjuk ditempatkan di  frame buffer untuk setiap pixel komponen pada primitive output untuk menampilkan warna tersebut. Numlah minimum warna yang disediakan dengan 3 bit penyimpanan per
pixel sanggup dilihat pada tabel 4.1
Ada beberapa laba menyimpan instruksi warna di tabel lookup. Penggunaan
tabel warna sanggup menyediakan jumlah yang warna simultan tanpa membutuhkan frame  buffer yang besar. Untuk banyak aplikasi, 256 atau 512 warna yang berbeda sudah  untuk sebuah gambar tunggal. Skema untuk penyimpanan nilai warna pada suatu tabel  warna, dimana nilai frame-buffer dipakai sebagai  indeks pada tabel warna  diilustrasikan pada gambar 4.x.
Pada gambar tersebut diperlihatkan suatu tabel warna dengan ukuran 24 bit per
entry diakses dari frame buffer dengan ukuran 8 bit per pixel. Nilai 196 disimpan di
posisi pixel (x,y) yang menunjuk pada lokasi di tabel yang berisikan nilai 2081. tiap
segmen 8 bit mengendalikan tingkat intensitas satu  dari tiga electron gun in monitor
RGB.

b.      GrayScale
Untuk Monitor yang tidak mempunyai kapabilitas warna, fungsi warna sanggup  digunakan pada agenda aplikasi dengan cara menentukan tingkat keabuan (gray scale)  untuk menampilkan primitive. Nilai numeric antara 0 dan 1 sanggup dipakai untuk  menspesifikasikan tingkat grayscale dan kemudian dikonversi menjadi nilai biner untuk
penyimpanan di system raster. Prosedur ini memungkinkan penentukan intensitas sanggup
lebih gampang diubahsuaikan ke system dengan kapabilitas grayscale yang berbeda.
Spesifikasi dari konde intensitas untuk system dengan 4 level grayscale sanggup  dilihat pada tabel 4.2. Pada tabel tersebut semua input dengan nilai intensitas 0.33 akan  disimpan sebagai nilai biner 01 di frame buffer dan pixel dengan nilai tersebut akan  ditampilkan sebagai dark gray (abu-abu gelap). Jika bit aksesori per pixel tersedia di
frame buffer dan nilai 0.33 akan dipetakan ke level terdekat. Dengan 3 bit per pixel kita
dapat mengakomodasi 8 level keabuan, bila system mempunyai ukuran 8 bit per pixel maka
akan sanggup ditampilkan 256 level keabuan

2.5 TRANSFORMASI DUA DIMENSI
Transformasi dua dimensi yaitu suatu model atau bentuk atau teknik-teknik memindahkan atau mengubah nilai posisi objek dalam sistem koordinat dua dimensi. Pemindahan objek ini sanggup diartikan sebagai pemindahan titik.


2.5.1    Translasi
Translasi yaitu suatu pergerakan/perpindahan semua titik dari  objek pada suatu jalur lurus sehingga menempati posisi baru. Jalur yang direpresentasikan oleh vektor disebut Translasi atau  Vektor Geser.
Ada dua cara yang sanggup dipakai untuk mentransformasi gambar yaitu :
a.       Transformasi objek
Definisinya yaitu mengubah koordinat-koordinat dari tiap-tiap titik di objek dengan beberapa aturan, meninggalkan underlying system koordinat yang tidak bisa di ubah lagi.
b.      Transformasi koordinat
Definisinya yaitu system koordinat yang gres di buat sebelumnya merupakan semua titik objek dalam system yang baru.

2.5.2    Rotasi
Rotasi terdiri dari 2 macam: rotasi melawan arah jarum jam (counter-clockwise) dan rotasi searah jarum jam (clockwise). Mengapa ada dua jenis transformasi?
a.  Susah untuk menentukan mana yang disebut sudut negatif dan aktual , alasannya di dunia toolspemrograman, kuadran pi yaitu counter-clockwise (melawan arah jarum jam), sedangkan di dunia ilmu pengetahuan, kuadran pi yaitu clockwise (searah jarum jam)
b. Oleh alasannya itu, untuk mempermudah, maka disepakati untuk menyebutkan arah rotasi untuk setiap transformasinya, sehingga menghilangkan kebingungan.

2.5.3    Skala
Transformasi skala yaitu perubahan ukuran suatu objek. Koordinat gres diperoleh dengan melaksanakan perkalian koordinat dengan ascling factor, yaitu(sx,sy) dimana sx yaitu scaling facor untuk sumbu x dam sy yaitu scaling factor untuk sumbu y. koordinat gres titik yang diskala sanggup diperoleh dengan  x’ = x.sx y’= y.sy scaling factor sx dan sy sanggup diberikan sembarang nilai positif. Nilai lebih dari 1 menerangkan bahwa sebuah objek diperbesar sedang nilai nilai kurang dari 1 memperlihatkan bahwa objek diperkecil.




BAB III
PERANCANGAN APLIKASI

3.1  Perancangan Menu

Aplikasi

Zoom

Rotasi

Pewarnaan

Tranlasi















Gambar 3.1 Perancangan Menu

3.2  Perancangan Antar Muka Pengguna


Gambar 3.2 Perancangan Antar Muka




BAB IV   
IMPLEMENTASI PROGRAM

4.1 Perangkat Keras yang Digunakan

Penyelesaian Aplikasi Grafika Komputer Menggunakan lazarus dibuat dengan didukung oleh komponen perangkat keras dengan spesifikasi sebagai berikut :

1.      Komputer Pesonal dengan processor min P1800Mhz atau yang lebih tinggi.
2.      RAM 32 MB atau lebih tinggi.
3.      Minimal HD 15 GB atau lebih tinggi.
4.      VGA minimal 128 MB atau lebih tinggi.
5.      Mouse dan Keyboard.

4.2Perangkat Lunak yang Digunakan
Untuk merancang Aplikasi Grafika Komputer Menggunakan lazarus dibutuhkan beberapa  perangkat lunak pendukung. Adapun perangkat lunak yang mendukung Sistem Aplikasi Intranet Arsip Digital ini untuk diimplementasikan pada system membutuhkan perangkat lunak (software) sebagai berikut :
1.      Sistem Operasi yang dipakai yaitu Microsoft XP, Vista, 7, dan 8
2.      Lazarus projeck versi :#09.30.04 for windows
4.3 Tampilan dan Modul Program
a. Tampilan Program











Gambar 4.1 Tampilan Program
b.Modul Program
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, Spin, ButtonPanel, Buttons, ColorBox, PairSplitter, Arrow;

type
  Elemen=record
       x,y: Integer;
    end;

  { TForm1 }

  TForm1 = class(TForm)
    bGeserSampingKeAtas: TBitBtn;
    bGeserBawahKeKiri: TBitBtn;
    bGeserBawahKeKanan: TBitBtn;
    bGeserSampingKeBawah: TBitBtn;
    bUbahGaris: TBitBtn;
    ColorDialog1: TColorDialog;
    kesamping: TBitBtn;
    kebawah: TBitBtn;

    bKeluar: TBitBtn;
    bKiriAtas: TBitBtn;
    bPrisma: TBitBtn;
    bReset: TBitBtn;
    bSegitiga: TBitBtn;
    bTrapesium: TBitBtn;
    bPersegipanjang: TBitBtn;
    bSegitiga3D: TBitBtn;
    bAtas: TBitBtn;
    Image2: TImage;
    Image3: TImage;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    pKiri: TBitBtn;
    pKanan: TBitBtn;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Putar: TLabel;
    rfill: TGroupBox;
    SpinEdit2: TSpinEdit;
    SpinEdit3: TSpinEdit;
    SpinEdit4: TSpinEdit;
    UbahUkuran: TLabel;
    ZoomIn: TBitBtn;
    ZoomOut: TBitBtn;
    bKananAtas: TBitBtn;
    bBawah: TBitBtn;
    bKiriBawah: TBitBtn;
    bKananBawah: TBitBtn;
    bKiri: TBitBtn;
    bKanan: TBitBtn;
    bsegitigasikusiku: TBitBtn;
    ColorBox1: TColorBox;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    GroupBox6: TGroupBox;
    Image1: TImage;
    Label1: TLabel;
    SpinEdit1: TSpinEdit;
    tSudut: TSpinEdit;
    Splitter1: TSplitter;

    procedure bAtasClick(Sender: TObject);
    procedure bBawahClick(Sender: TObject);
    procedure BitBtn17Click(Sender: TObject);
    procedure bGeserSampingKeAtasClick(Sender: TObject);
    procedure bGeserBawahKeKiriClick(Sender: TObject);
    procedure bGeserBawahKeKananClick(Sender: TObject);
    procedure bGeserSampingKeBawahClick(Sender: TObject);
    procedure bUbahGarisClick(Sender: TObject);
    procedure kesampingClick(Sender: TObject);
    procedure bKananAtasClick(Sender: TObject);
    procedure bKananBawahClick(Sender: TObject);
    procedure bKananClick(Sender: TObject);
    procedure bKeluarClick(Sender: TObject);
    procedure bKiriAtasClick(Sender: TObject);
    procedure bKiriBawahClick(Sender: TObject);
    procedure bKiriClick(Sender: TObject);
    procedure bSegitiga3DClick(Sender: TObject);
    procedure bsegitigasikusikuClick(Sender: TObject);
    procedure bPersegipanjangClick(Sender: TObject);
    procedure bPrismaClick(Sender: TObject);
    procedure bResetClick(Sender: TObject);
    procedure bSegitigaClick(Sender: TObject);
    procedure bTrapesiumClick(Sender: TObject);
    procedure ColorBox1Change(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure kebawahClick(Sender: TObject);
    //procedure Label8Click(Sender: TObject);

    procedure pKananClick(Sender: TObject);
    procedure pKiriClick(Sender: TObject);
    procedure ResetClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure SpinEdit2Change(Sender: TObject);
    procedure SpinEdit3Change(Sender: TObject);
    procedure ZoomInClick(Sender: TObject);
    procedure ZoomOutClick(Sender: TObject);
    procedure TitikTengahObjek(Sender :TObject);
    procedure BoundaryFill(x,y,fill,boundary:Integer);
    procedure Image1DblClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  //Objek: array[1..60] of Elemen;
  j,k : Integer;
  Objek, temp, free, source, sm, gbr: array [1..50] of elemen;
  bangun, i, titik, f  : integer;
  boundary : TColor;
  tob : elemen;
  sudut : real;
  rotasi : integer ;
  xc,yc,r :integer;
  geser : integer;
  fx, fy : integer;
  poly : integer;
  Sdt : real;



implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormActivate(Sender: TObject);
begin

end;

procedure TForm1.kebawahClick(Sender: TObject);
begin
  for i:=1 to titik do
    begin
      temp[i].y:=(objek[i].y-(2*(objek[i].y-tob.y)));
      temp[i].x:=objek[i].x;
    end;
    for i:=1 to titik do
    begin
      objek[i].y:=temp[i].y;
      objek[i].x:=temp[i].x;
    end;
    FormShow(Sender);
    TitikTengahObjek(Sender);
    BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;



procedure TForm1.bsegitigasikusikuClick(Sender: TObject);
begin
    bangun:=5; titik:=5; poly:=1;
    Objek[1].x := 70;                Objek[1].y := 50;
    Objek[2].x := 140;                Objek[2].y := 150;
    Objek[3].x := 70;                 Objek[3].y := 150;
    Objek[4].x := 70;                Objek[4].y :=50;
    Objek[5].x := 70;                Objek[5].y :=50;

    TitikTengahObjek(Sender);
    FormShow(Sender);
    //BoundaryFill(tob.x,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bPersegipanjangClick(Sender: TObject);
begin
    bangun:=4; titik:=5; poly:=1;
    Objek[1].x := 70;                 Objek[1].y := 50;
    Objek[2].x := 250;                Objek[2].y := 50;
    Objek[3].x := 250;                Objek[3].y := 150;
    Objek[4].x := 70;                 Objek[4].y :=150;
    Objek[5].x := 70;                 Objek[5].y := 50;

    TitikTengahObjek(Sender);
    FormShow(Sender);
end;

procedure TForm1.bPrismaClick(Sender: TObject);
begin
    bangun:=3; titik:=5; poly:=1;
    Objek[1].x := 100;                Objek[1].y := 50;
    Objek[2].x := 150;                Objek[2].y := 90;
    Objek[3].x := 130;                Objek[3].y := 150;
    Objek[4].x := 70;                 Objek[4].y :=150;
    Objek[5].x := 50;                 Objek[5].y := 90;

    TitikTengahObjek(Sender);
    FormShow(Sender);

end;

procedure TForm1.bResetClick(Sender: TObject);
begin
  Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
end;

procedure TForm1.TitikTengahObjek (Sender :TObject);
begin
   tob.x :=0;
   tob.y:=0;
    for i:=1 to titik do
        begin
        tob.x:=tob.x+objek[i].x;
        tob.y:=tob.y+objek[i].y;
        end;
    tob.x:=tob.x div titik;
    tob.y:=tob.y div titik;
end;

procedure TForm1.BoundaryFill(x,y,fill,boundary:Integer);
var
   current:Integer;
begin
   current:=Image1.Canvas.Pixels[x,y];
   if((current<>boundary)and(current<>fill))then
   begin
        Image1.Canvas.Pixels[x,y]:=fill;
        Boundaryfill(x+1,y,fill,boundary);
        Boundaryfill(x-1,y,fill,boundary);
        Boundaryfill(x,y+1,fill,boundary);
        Boundaryfill(x,y-1,fill,boundary);
   end;

end;

procedure TForm1.ColorBox1Change(Sender: TObject);
begin
    if(bangun=7) then
    BoundaryFill(xc,yc,ColorBox1.Selected,Image1.Canvas.Pen.Color)
  else if (poly=1)  then
    BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.Image1DblClick(Sender: TObject);
begin
  Image1.Canvas.LineTo(objek[1].x,objek[1].y);
  poly:=1;
end;


procedure TForm1.bSegitigaClick(Sender: TObject);
begin
  bangun:=1; titik:=5; poly:=1;
    Objek[1].x := 100;                Objek[1].y := 50;
    Objek[2].x := 170;                Objek[2].y := 150;
    Objek[3].x := 30;                 Objek[3].y := 150;
    Objek[4].x := 100;                Objek[4].y :=50;
    Objek[5].x := 100;                Objek[5].y :=50;
    Objek[6].x := 100;                Objek[6].y :=50;
    Objek[7].x := 100;                Objek[7].y :=50;
    Objek[8].x := 100;                Objek[8].y :=50;
    Objek[9].x := 100;                Objek[9].y :=50;
    Objek[10].x := 100;                Objek[10].y :=50;
    Objek[11].x := 100;                Objek[11].y :=50;
    Objek[12].x := 100;                Objek[12].y :=50;
    Objek[13].x := 100;                Objek[13].y :=50;
    Objek[14].x := 100;                Objek[14].y :=50;

    TitikTengahObjek(Sender);
    FormShow(Sender);
end;

procedure TForm1.bTrapesiumClick(Sender: TObject);
begin
    bangun:=2; titik:=5; poly:=1;
    Objek[1].x := 100;                Objek[1].y := 50;
    Objek[2].x := 250;                Objek[2].y := 50;
    Objek[3].x := 250;                Objek[3].y := 150;
    Objek[4].x := 30;                 Objek[4].y :=150;
    Objek[5].x := 100;                Objek[5].y := 50;

    TitikTengahObjek(Sender);
    FormShow(Sender);
end;

procedure TForm1.bAtasClick(Sender: TObject);
begin
  for j:=1 to 14 do
      Objek[j].y := Objek[j].y-(SpinEdit1.Value);
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bBawahClick(Sender: TObject);
begin
  for j:=1 to 14 do
      Objek[j].y := Objek[j].y+(SpinEdit1.Value);
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.BitBtn17Click(Sender: TObject);
begin

end;

procedure TForm1.bGeserSampingKeAtasClick(Sender: TObject);
begin
  for i:=1 to titik do
     begin
          objek[i].x:=objek[i].x-tob.x;
          Objek[i].y:=objek[i].y-tob.y;
          if(objek[i].x>0) then
          begin
             temp[i].y:=objek[i].y-StrToInt(SpinEdit4.Text);
          end
          else
          temp[i].y:=objek[i].y;
          temp[i].x:=objek[i].x;
          objek[i]:=temp[i];
          objek[i].x:=objek[i].x+tob.x;
          objek[i].y:=objek[i].y+tob.y;
     end;
  FormShow(Sender);
  TitikTengahObjek(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bGeserBawahKeKiriClick(Sender: TObject);
begin
for i:=1 to titik do
     begin
          objek[i].x:=objek[i].x-tob.x;
          Objek[i].y:=objek[i].y-tob.y;
          if(objek[i].y>-0) then
          begin
             temp[i].x:=objek[i].x-StrToInt(SpinEdit4.Text);
          end
          else
          temp[i].x:=objek[i].x;
          temp[i].y:=objek[i].y;
          objek[i]:=temp[i];
          objek[i].x:=objek[i].x+tob.x;
          objek[i].y:=objek[i].y+tob.y;
     end;
  FormShow(Sender);
  TitikTengahObjek(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bGeserBawahKeKananClick(Sender: TObject);
begin
  for i:=1 to titik do
     begin
          objek[i].x:=objek[i].x-tob.x;
          Objek[i].y:=objek[i].y-tob.y;
          if(objek[i].y>0) then
          begin
             temp[i].x:=objek[i].x+StrToInt(SpinEdit4.Text);
          end
          else
          temp[i].x:=objek[i].x;
          temp[i].y:=objek[i].y;
          objek[i]:=temp[i];
          objek[i].x:=objek[i].x+tob.x;
          objek[i].y:=objek[i].y+tob.y;
     end;
  FormShow(Sender);
  TitikTengahObjek(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bGeserSampingKeBawahClick(Sender: TObject);
begin
  for i:=1 to titik do
     begin
          objek[i].x:=objek[i].x-tob.x;
          Objek[i].y:=objek[i].y-tob.y;
          if(objek[i].x>-0) then
          begin
             temp[i].y:=objek[i].y+StrToInt(SpinEdit4.Text);
          end
          else
          temp[i].y:=objek[i].y;
          temp[i].x:=objek[i].x;
          objek[i]:=temp[i];
          objek[i].x:=objek[i].x+tob.x;
          objek[i].y:=objek[i].y+tob.y;
     end;
  FormShow(Sender);
  TitikTengahObjek(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bUbahGarisClick(Sender: TObject);
begin
    if ColorDialog1.Execute then
     begin
     Image1.Canvas.Pen.Color:=ColorDialog1.Color;
     end;
   FormShow(Sender);
end;

procedure TForm1.kesampingClick(Sender: TObject);
begin
  for i:=1 to titik do
    begin
      temp[i].x:=(objek[i].x-(2*(objek[i].x-tob.x)));
      temp[i].y:=objek[i].y;
    end;
    for i:=1 to titik do
    begin
      objek[i].y:=temp[i].y;
      objek[i].x:=temp[i].x;
    end;
    FormShow(Sender);
    TitikTengahObjek(Sender);
    BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)

end;

procedure TForm1.bKananAtasClick(Sender: TObject);
begin
  for j:=1 to 14 do
               begin
      Objek[j].y := Objek[j].y-(SpinEdit1.Value);
      Objek[j].x := Objek[j].x+(SpinEdit1.Value);
               end;
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bKananBawahClick(Sender: TObject);
begin
  for j:=1 to 14 do  begin
      Objek[j].x := Objek[j].x+(SpinEdit1.Value);
      Objek[j].y := Objek[j].y+(SpinEdit1.Value);
         end;
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bKananClick(Sender: TObject);
begin
  for j:=1 to 14 do
      Objek[j].x := Objek[j].x+(SpinEdit1.Value);
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bKeluarClick(Sender: TObject);
begin
  Close();
end;

procedure TForm1.bKiriAtasClick(Sender: TObject);
begin
  for j:=1 to 14 do       begin
      Objek[j].x := Objek[j].x-(SpinEdit1.Value);
      Objek[j].y := Objek[j].y-(SpinEdit1.Value);
  end;
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bKiriBawahClick(Sender: TObject);
begin
  for j:=1 to 24 do
  begin
      Objek[j].x := Objek[j].x-(SpinEdit1.Value);
      Objek[j].y := Objek[j].y+(SpinEdit1.Value);
  end;
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bKiriClick(Sender: TObject);
begin
  for j:=1 to 14 do
      Objek[j].x := Objek[j].x-(SpinEdit1.Value);
  FormShow(Sender);
  BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.bSegitiga3DClick(Sender: TObject);
begin
  bangun:=6; titik:=14; poly:=1;
  Objek[1].x := 200;           Objek[1].y :=200;
  Objek[2].x := 250;          Objek[2].y :=50;
  Objek[3].x := 300;          Objek[3].y :=200;
  Objek[4].x := 300;          Objek[4].y :=200;
  Objek[5].x := 300;          Objek[5].y :=200;
  Objek[6].x := 250;           Objek[6].y :=250;
  Objek[7].x := 300;          Objek[7].y :=100;
  Objek[8].x := 350;          Objek[8].y :=250;
  Objek[9].x := 200;           Objek[9].y :=200;
  Objek[10].x := 250;         Objek[10].y :=250;
  Objek[11].x := 250;         Objek[11].y :=50;
  Objek[12].x := 300;          Objek[12].y :=100;
  Objek[13].x := 300;         Objek[13].y :=200;
  Objek[14].x := 350;            Objek[14].y := 250;

  TitikTengahObjek(Sender);
  FormShow(Sender);
end;

procedure TForm1.pKananClick(Sender: TObject);

begin
     sdt := StrToInt(SpinEdit2.Text)*pi/180;
     for i:=1 to titik do
     begin
        Objek[i].x:=Objek[i].x-tob.x;
        Objek[i].y:=Objek[i].y-tob.y;
        temp[i].x:=round(Objek[i].x*cos(Sdt)-Objek[i].y*sin(Sdt));
        temp[i].y:=round(Objek[i].x*sin(Sdt)+Objek[i].y*cos(Sdt));
        Objek[i]:=temp[i];
        Objek[i].x:= Objek[i].x+tob.x;
        Objek[i].y:= Objek[i].y+tob.y;
     end;
     FormShow(Sender);
     BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.pKiriClick(Sender: TObject);
begin
     sdt:=-StrToInt(SpinEdit2.text)*pi/180;
     for i:=1 to titik do
     begin
        Objek[i].x:=Objek[i].x-tob.x;
        Objek[i].y:=Objek[i].y-tob.y;
        temp[i].x:=round(Objek[i].x*cos(Sdt)-Objek[i].y*sin(Sdt));
        temp[i].y:=round(Objek[i].x*sin(Sdt)+Objek[i].y*cos(Sdt));
        Objek[i]:=temp[i];
        Objek[i].x:= Objek[i].x+tob.x;
        Objek[i].y:= Objek[i].y+tob.y;
     end;
     FormShow(Sender);
     BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;



procedure TForm1.ResetClick(Sender: TObject);
begin

end;



procedure TForm1.FormShow(Sender: TObject);
var
   i : Integer;
begin
   Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
   Image1.Canvas.MoveTo(Objek[5].x,Objek[5].y);
   for i:=1 to 5 do
   begin
        Image1.Canvas.LineTo(Objek[i].x,Objek[i].y);
   end;
      Image1.Canvas.MoveTo(Objek[8].x,Objek[8].y);
   for i:=6 to 8 do
   begin
        Image1.Canvas.LineTo(Objek[i].x,Objek[i].y);
   end;
   Image1.Canvas.MoveTo(Objek[10].x,Objek[9].y);
   for i:=9 to 10 do
   begin
        Image1.Canvas.LineTo(Objek[i].x,Objek[i].y);
   end;
   Image1.Canvas.MoveTo(Objek[12].x,Objek[12].y);
   for i:=11 to 12 do
   begin
        Image1.Canvas.LineTo(Objek[i].x,Objek[i].y);
   end;
   Image1.Canvas.MoveTo(Objek[14].x,Objek[14].y);
   for i:=13 to 14 do
   begin
        Image1.Canvas.LineTo(Objek[i].x,Objek[i].y);
   end;

   if(bangun=10) then
    begin
            Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
            Image1.Canvas.MoveTo(objek[5].x, objek[5].y);
            for i:=1 to 5 do
            Image1.Canvas.LineTo(objek[i].x, objek[i].y);
    end;

    if ((bangun<7) And (bangun>0)) then
       begin
       if(poly=1) then
            begin
            Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
            Image1.Canvas.MoveTo(objek[titik].x, objek[titik].y);
            for i:=1 to titik do
                Image1.Canvas.LineTo(objek[i].x, objek[i].y);
            end
       else
            begin
            Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
            Image1.Canvas.MoveTo(objek[1].x, objek[1].y);
            for i:=1 to titik do
                Image1.Canvas.LineTo(objek[i].x, objek[i].y);
            end
            end;

end;

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin

end;

procedure TForm1.SpinEdit2Change(Sender: TObject);
begin

end;

procedure TForm1.SpinEdit3Change(Sender: TObject);
begin

end;

procedure TForm1.ZoomInClick(Sender: TObject);
begin
     if(bangun=6) then
     Begin
        r:= r div StrToInt(SpinEdit3.Text);
       // CircleMidPoint(xc,yc,r);
     end
     else
     begin
     for i:=1 to 14 do
     begin
        Objek[i].x:=Objek[i].x-tob.x;
        Objek[i].y:=Objek[i].y-tob.y;
        Temp[i].x:=round(Objek[i].x*SpinEdit3.value);
        Temp[i].y:=round(Objek[i].y*SpinEdit3.value);
        Objek[i]:=Temp[i];
        Objek[i].x:= Objek[i].x+tob.x;
        Objek[i].y:= Objek[i].y+tob.y;
     end;
     FormShow(Sender);
     end;
     BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;

procedure TForm1.ZoomOutClick(Sender: TObject);
begin
     if(bangun=6) then
     Begin
        r:= r div StrToInt(SpinEdit3.Text);
       // CircleMidPoint(xc,yc,r);
     end
     else
     begin
     for i:=1 to 14 do
     begin
        Objek[i].x:=Objek[i].x-tob.x;
        Objek[i].y:=Objek[i].y-tob.y;
        Temp[i].x:=round(Objek[i].x/SpinEdit3.value);
        Temp[i].y:=round(Objek[i].y/SpinEdit3.value);
        Objek[i]:=Temp[i];
        Objek[i].x:= Objek[i].x+tob.x;
        Objek[i].y:= Objek[i].y+tob.y;
     end;
     FormShow(Sender);

     end;
     BoundaryFill(tob.x,tob.y,ColorBox1.Selected,Image1.Canvas.Pen.Color)
end;



end.


















BAB V     
KESIMPULAN DAN SARAN

5.1.Kesimpulan
      Dari pembahasan sanggup diambil kesimpulan sebagai berikut :
1.      Didalam pembuatan grafik di jaman serba teknologi kita bebas menentukan alat apa yang kita pakai, dan untuk memahami secara mendalam transformasi di dalam grafik komputer sangatlah penting menguasai ilmu matematik.
2.      Perbandingan hasil pembuatan agenda dengan memakai bahasa programan lebih sulit dan berbeda jauh dari segi tampilan. Maupun tata cara pembuatannya di bandingkan dengan agenda aplikasi yang menerapkan system just clik(event driven).

5.2.Saran
      Setelah melihat uraian diatas, penyusun mempunyai saran.
1.      Terlebih dahulu berguru algoritma, alasannya algoritma yaitu salah satu kunci untuk sanggup memahami permasalahan yang akan di hadapi didalam pembuatan grafika komputer.
2.      Bila ingin menciptakan suatu gambar/grafik, pilihlah agenda aplikasi yang lebih manis berdasarkan anda, lebih kompleks, dan yang khusus menangani pembuatan gambar/grafik serta yang mengikuti perkembangan jaman.
3.      Harus memahami sintak-sintak (bahasa penulisan dalam bahasa pemrograman) yang terdapat dalam bahasa pemrograman ataupun fitur-fitur yang terdapat di dalam agenda aplikasi.









DAFTAR PUSTAKA

-          https://ulanganbukahape.blogspot.com//search?q=aplikasi-grafika-komputer-menggunakan-lazarus (diakses tgl 26 juni 2012 pukul 23.30)

-          https://ulanganbukahape.blogspot.com//search?q=aplikasi-grafika-komputer-menggunakan-lazarus  (diakses tgl 26 juni 2012 pukul 23.40)

-          https://ulanganbukahape.blogspot.com//search?q=aplikasi-grafika-komputer-menggunakan-lazarus (diakses tgl 27 juni 2012 pukul 07.20)

-          https://ulanganbukahape.blogspot.com//search?q=aplikasi-grafika-komputer-menggunakan-lazarus (diakses tgl 27 juni 2012 pukul 07.55)



0 Response to "Aplikasi Grafika Komputer Memakai Lazarus"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel