Grafik Bahasa C
Grafik Bahasa C
Lisensi Dokumen:
Copyright !00"#!008 IlmuKomputer.Com %eluruh dokumen di IlmuKomputer.Com dapat digunakan& dimodi'ikasi dan dise(arkan secara (e(as untuk tu)uan (ukan komersial *nonpro'it+& dengan syarat tidak menghapus atau meru(ah atri(ut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. ,idak diper(olehkan melakukan penulisan ulang& kecuali mendapatkan i)in terle(ih dahulu dari IlmuKomputer.Com.
Gambar bermakna sejuta kata. Kalimat tersebut tidak berlebihan, karena dengan gambar kita dapat memperlihatkan sesuatu tanpa perlu menjelaskan, dan orang pun langsung mengerti. Pada bagian ini, kita akan membahas mengenai dasar-dasar pemrograman grafik menggunakan bahasa C. Ada dua syarat utama untuk memulai pemrograman grafik, yaitu meng-include-kan file header <graphics h! dan melakukan proses inisialisasi mode grafik yang digunakan oleh komputer. Untuk inisialisasi mode grafik digunakan perintah initgraph"# yang ada di file header graphics.h. ormat umum dari perintah ini adalah ! initgraph(graphdriver, graphmode, direktori_bgi) "ariabel graphdri#er digunakan untuk menyimpan nilai dri#er grafis yang ditentukan berdasarkan kartu grafik yang digunakan. "ariabel graphmode digunakan untuk menyimpan nilai mode grafis, sedangkan direktori$bgi adalah tempat file .bgi yang digunakan dalam pemrograman grafik. Contoh listing program berikut ini akan menggambarkan persegi panjang dengan diagonal yang menutupi layar.
Komunitas eLearning IlmuKomputer.Com Copyright !00"#!00$ IlmuKomputer.Com
#include<stdio.h> #include<conio.h> #include<graphics.h> int Xmax, Ymax int !raph"river,!raph#ode,$rror%ode main() & !raph"river ' "$($%( initgraph( )!raph"river, )!raph#ode, *c+,,tc* ) $rror%ode ' graphresult() i-( $rror%ode .' gr/k )& print-(* !raphics 01stem $rror+ 2s,n*, grapherrormsg( $rror%ode ) ) exit( 3 ) 4 Xmax ' getmaxx() Ymax ' getmax1() rectangle(5,5,Xmax,Ymax) line(5,5,Xmax,Ymax) line(5,Ymax,Xmax,5) getch() closegraph() return 5 4 Program diatas dimulai dengan inisialisasi #ariabel !raph"river ' "$($%(. Perintah ini berarti program meminta autodeteksi, sehingga &urbo C secara langsung akan mencocokkan dri#er dan mode grafik yang terdeteksi. Proses berikutnya adalah inisialisasi mode grafik dengan perintah ! initgraph( )!raph"river, )!raph#ode, *c+,,tc* ) melalui perintah ini &urbo C akan menginisialisasi kartu grafik yang telah terdeteksi, kemudian kompiler akan menemukan dan memasukkan graphic#dri-er 'file dengan akhiran $gi(. )egitu nama dri#er ditemukan, maka dri#er akan menangani rincian antara program grafik dengan perangkat keras. *ika ternyata dri#er grafik tidak dapat ditemukan, maka initgraph tidak akan dapat membuat grafik apapun. Karena itu perintah $rror%ode ' graphresult() digunakan untuk mengembalikan nilai inisialisasi grafik. *ika nilai yang dikembalikan + 'gr,K( maka kita dapat memulai program grafik. *ika tidak, maka kita harus memuat listing berikut untuk mendeteksi
Komunitas eLearning IlmuKomputer.Com Copyright !00"#!00$ IlmuKomputer.Com
kesalahan pada inisialisasi grafik. i-( $rror%ode .' gr/k )& print-(* !raphics 01stem $rror+ 2s,n*, grapherrormsg( $rror%ode ) ) exit( 3 ) 4 .etelah proses inisialisasi berhasil dilakukan, maka kita dapat mulai membuat grafik yang diinginkan. Pi/el pada layar dinomori mulai dari sudut kiri atas layar '%& %( sampai dengan sudut kanan ba0ah 'getma''"#& getma'y(.
"%& %#
+A,AR MONI*OR
( getmaxx(), getmax1())
Perintah
untuk
menggambar
persegi
panjang
adalah
atas dari persegi panjang, dan /-, y- adalah sudut kanan ba0ah dari perintah line(x3,13,x6,16) digunakan untuk
menggambar garis dari koordinat '/%,y%( sampai koordinat '/-,y-(. *ika program selesai dilakukan maka kita harus memanggil fungsi closegraph() untuk menutup mode grafik. F(NGSI)F(NGSI GAMBAR PADA *(RBO C 1engan menggunakan format program seperti contoh sebelumnya, kita dapat membuat gambar-gambar lain menggunakan fungsi-fungsi gambar yang disediakan oleh turbo C, diantaranya adalah ! garis 2
fungsi line(x3,13,x6,16)
yang berarti penggambaran garis dimulai dari koordinat a0al '/%, y%( sampai koordinat akhir '/-,y-(. Perintah lain untuk menggambar garis adalah lineto(x,1) dan linerel(dx,d1). Untuk menggunakan kedua perintah tersebut, kita harus mengerti terlebih dahulu konsep CP 'Current .osition( yang berarti posisi saat ini. Pada saat pertama kali memanggil fungsi lineto(x,1) dan linerel(dx,d1)CP terletak pada posisi koordinat '+,+( sehingga garis akan digambar dari posisi '+,+( sampai posisi '/,y( pada perintah lineto'( dan posisi 'd/,dy( pada perintah linerel'(, selanjutnya CP akan diperbaharui pada titik akhir penggambaran garis. Pada a0al pemanggilan kedua perintah tersebut memang memiliki persamaan, yaitu menggambar garis dari posisi '+,+( sampai ke posisi pada parameter perintah. Perbedaanya adalah saat CP diperbaharui pada posisi akhir penggambaran garis '/CP,yCP(. *ika kita menggunakan pada fungsi '/,y(. lineto(x,1)maka Pada garis akan digambar dari '/CP,yCP( sampai koordinat '/,y(, kemudian CP akan diperbaharui posisi penggunaan perintah linerel(dx,d1), garis akan digambarkan dari koordinat '/CP,yCP( sampai koordinat '/CP3d/ , yCP3dy(. &urbo C juga menyediakan bentuk-bentuk garis yang dapat diatur dengan perintah setlinest1le(tipe_garis, ini ! 7ama !aris 0/89"_897$ "/(($"_897$ %$7($:_897$ ";0<$"_897$ 7omor !aris 5 3 6 = !ambar pola_garis, tebal_garis) 4ilai untuk tipe garis diberikan dalam tabel berikut
4ilai untuk pola garis diabaikan sehingga kita dapat mengisikan nilai nol '+(. .edangkan ketebalan garis memiliki pilihan nilai sebagai berikut ! >$($?;8;7 7/:#_@9"(< (<9%>_@9"(< Penggunaan perintah ini 798;9 3 = dapat >$($:;7!;7 >etebalan 3 pixel >etebalan = pixel dilakukan dengan langsung
mengisikan tipe garis, atau dengan nomornya saja. *adi perintah ! 0etlinest1le(center_line,5,thick_Aidth) sama dengan 0etlinest1le(6,5,=) segi empat Untuk menggambar segi empat, digunakan perintah rectangle(x3,13,x6,16), dimana /% dan y% adalah koordinat sudut kiri atas dari persegi panjang, dan /-, y- adalah sudut kanan ba0ah dari persegi panjang. Perintah lain untuk menggambar segiempat adalah bar(x3,13,x6,16). Perbedaan kedua perintah ini terletak pada pe0arnaan 'akan dijelaskan pada bagian 0arna grafik( lingkaran Untuk menggambar lingkaran digunakan perintah circle(x,1,radius) dimana '/,y( adalah koordinat titik pusat lingkaran, sedangkan radius adalah jari-jari lingkaran. 6lips Untuk menggambar elips digunakan perintah ellipse(x,1,alpha,beta,rx,r1) dimana '/,y( adalah koordinat titik pusat elips, alpha adalah sudut a0al ellipse, beta adalah sudut akhir ellipse, r/ adalah jari-jari ellipse yang sejajar dengan sumbu /, ry adalah jari-jari ellipse yang sejajar dengan sumbu y. 6llips akan digambarkan tertutup atau terbuka sesuai dengan nilai alpha dan beta-nya, jika ellips ingin digambar tertutup maka alpha harus diisi dengan +, dan beta harus diisi dengan 27+. perintah ellipse'( juga dapat digunakan untuk menggambar lingkaran yaitu dengan mengisi nilai alpha 8 +, beta 8 27+ dan r/ 8 9
ry. *ika ingin menggambarkan ellipse dengan pola isian 0arna, digunakan perintah -illellipse(x,1,rx,r1) dimana '/,y( adalah koordinat titik pusat ellipse, r/ jari-jari terpanjang ellipse, dan ry jari-jari terpendek ellipse. Parameter alpha dan beta memang tidak terdapat pada perintah ini, karena ellipse akan diisi pola isian 0arna maka ellipse harus digambar tertutup dengan kata lain nilai alpha selalu + dan beta selalu 27+ sehingga tidak perlu dituliskan. Pola isian 0arna akan dibahas berikutnya. Contoh program menggunakan fungsi gambar diberikan pada listing berikut ini ! #include<stdio.h> #include<conio.h> #include<graphics.h> main() & int x,1 int !raph"river,!raph#ode,$rror%ode !raph"river ' "$($%( initgraph( )!raph"river, )!raph#ode, *c+,,tc* ) $rror%ode ' graphresult() i-( $rror%ode .' gr/k )& print-(* !raphics 01stem $rror+ 2s,n*, grapherrormsg( $rror%ode ) ) exit( 3 ) 4 x'getmaxx() 1'getmax1() rectangle(xBC,1BC,=DxBC,=D1BC) line(xBC,1BC,=DxBC,=D1BC) line(=DxBC,1BC,xBC,=D1BC) circle(xB6,1B6,655) getch() closegraph() return 5 4 :asil eksekusi program diatas ditunjukkan oleh gambar berikut !
-ARNA DAN PO+A PADA GRAFIK ;arna grafik yang disediakan turbo C pada file header graphics.h adalah ! >ode @arna 5 3 6 = C F G H I J 35 33 36 3= 3C 3F >eterangan ?8;%> ?8E$ !:$$7 %Y;7 :$" #;!$7(; ?:/@7 89!<(!:;Y ";:>!:;Y 89!<(?8E$ 89!<(!:$$7 89!<(%Y;7 89!<(:$" 89!<(#;!$7(; Y$88/@ @<9($
Perintah-perintah yang berhubungan dengan pola dan 0arna diantaranya ! %. setcolor'( Perintah setcolor'( berfungsi untuk menentukan 0arna gambar yang aktif. .intaks dari perintah ini adalah setcolor(nomor_Aarna). Contoh, jika kita menuliskan perintah! setcolor(3) rectangle(F5,F5,365,355) berarti kita menggambarkan segiempat dengan 0arna border
Komunitas eLearning IlmuKomputer.Com Copyright !00"#!00$ IlmuKomputer.Com
<
biru -. setbkcolor'( Perintah setbkcolor'( berfungsi untuk mengatur 0arna background layar. .intaks dari perintah ini adalah setbkcolor(nomor_Aarna). Contoh, untuk membuat background ber0arna kuning digunakan perintah setbkcolor(14). 2. floodfill'( .intaks dari perintah ini adalah -lood-ill(x, 1, Aarna_border). Perintah floodfill'( berfungsi untuk mengisi suatu 0ilayah dari posisi '/,y( sampai 0arna border yang sudah ditentukan. Contohnya, perintah floodfill(100,50,4)digunakan untuk mengisi 0arna dari posisi koordinat '%++,9+( sampai ditemukan 0arna border merah. 5. setfillstyle'( Perintah setfillstyle'( berfungsi untuk mengatur 0arna dan pola isian. .intaks dari perintah ini adalah set-illst1le(nomor_pola, nomor_Aarna). *enis-jenis pola isian diberikan oleh tabel berikut ! 7ama Kola 7omor Kola !ambar
$#K(Y_L988
0/89"_L988
897$_L988
8(08;0<_L988
08;0<_L988
?>08;0<_L988
8(?>08;0<_L988
<;(%<_L988
X<;(%<_L988
97($:8$;M$_L988
@9"$_"/(_L988
35
%8/0$_"/(_L988
33
*EKS DA+AM MODE GRAFIK Untuk menampilkan teks dalam mode grafis digunakan perintah outextx1(x,1,str), dimana '/,y( adalah koordinat a0al penulisan teks dan str adalah teks yang akan dituliskan. 'Current .osition(
Komunitas eLearning IlmuKomputer.Com Copyright !00"#!00$ IlmuKomputer.Com
>
ungsi lain untuk menuliskan teks adalah perintah outtext(str). ungsi outte/t'( akan menuliskan teks dari posisi'+,+( saat pemanggilan pertama, kemudian memperbaharui CP pada pemanggilan berikutnya berdasarkan posisi CP sebelumnya. Untuk mengatur jenis dan ukuran font, digunakan perintah sette/tstyle'(. .intaks dari perintah ini adalah! settextst1le(Penis, arah, ukuran) *enis-jenis font yang dapat digunakan dalam bahasa C diberikan dalam tabel berikut ini ! 7ama Lont "$L;E8(_L/7( (:9K8$X_L/7( 0#;88_L/7( 0;70_0$:9L_L/7( !/(<9%_L/7( 7ilai 5 3 6 = C >eterangan Lont IxI bitNmap Lont triplex 0mall -ont Lont sans seriLont gothic
Arah penulisan tabel terdiri dari dua jenis yaitu dari kiri ke kanan atau dari atas ke ba0ah. Parameter arah diberikan dalam tabel berikut ini ! "irection </:9O_"9: M$:(_"9: 7ilai 5 3 >eterangan "ari kiri ke kanan "ari atas ke baAah
.edangkan ukuran font ditentukan dari nilai % sampai %+. Angka % menggambarkan teks dengan ukuran huruf =/= pi/el, - adalah %7/%7 pi/el demikian seterusnya.Contoh bentuk dari jenis-jenis font diatas dapat dilihat berikut ini !
%+
)erikut ini akan diberikan contoh listing program yang menampilkan teks dan grafik ! #include<stdio.h> #include<conio.h> #include<graphics.h> int x,1 int !raph"river,!raph#ode,$rror%ode main() & !raph"river ' "$($%( initgraph( )!raph"river, )!raph#ode, *c+,,tc* ) $rror%ode ' graphresult() i-( $rror%ode .' gr/k )& print-(* !raphics 01stem $rror+ 2s,n*, grapherrormsg( $rror%ode ) ) exit( 3 ) 4 settextst1le(=,5,C) outtextx1(6F,F5,*<;9 L:9$7",*) outtextx1(6F, 355,*7;#; 0;Y; #:. 0#98$*) x ' getmaxx()B6 1 ' getmax1()B6 bar(xNHF,1NF5,xQHF,1Q355) setcolor(5) set-illst1le(J,3C) -illellipse(x,1Q6F,G5,G5) set-illst1le(35,5) -illellipse(xN6F,1Q35,F,F) -illellipse(xQ6F,1Q35,F,F) setcolor(5) setlinest1le(5,5,=) ellipse(x,1QC5,3I5,=G5,65,35)
Komunitas eLearning IlmuKomputer.Com Copyright !00"#!00$ IlmuKomputer.Com
%%
%-