GirişBu kısımda sadece
Turbo C derleyicisine ait basit grafik uygulamaları kısaca anlatılmıştır. Örneklerde verilen grafik fonksiyonları ANSI C de bulunmamaktadır. Bu yüzden bir çok C derleyicisi, kendi bünyesinde farklı grafik fonksiyonlarına sahiptir. Örneğin Linux ortamındaki grafik kullanmak için
g2 kütüphanesi geliştirilmiştir.
Grafik Ekranına GeçişTurbo C'de, Grafik sistemine geçmek için, initgraph() fonksiyonunu kullanılır. Bütün çizimler sadece DOS ortamında çalışır. Grafik fonksiyonlarının kullanılması için graphics.h başlık dosyası programın başına ilave edilmelidir. Grafik işlemleri için temel işlemler:
#include <graphics>
#include <stdlib>
...
int surucu=DETECT,grmod,hata_kodu; /* DETECT grafik sürücüsünü otomatik seçer */
.
.
.
initgraph(&surucu,&grmod,""); /* grafik ekranını başlat */
hata_kodu = graphresult(); /* hata_kodu al */
if (hata_kodu != grOk) /* hata_kodu 0 dan farklı ise başlatma */
{
puts("Hata olustu.");
puts("Grafik ekrani baslatilamiyor.");
exit(1);
}
.
. /* grafik işlemleri ... */
.
closegraph(); /* grafik ekranını kapat */
şeklindedir.
NOT
initgraph fonksiyonundaki 3. parametre ("") boş bırakıldığında kaynak dosyanın C:\TC> dizininde olması zorunludur.
Eğer kaynak dosya başka bir dizinin altında ise o zaman initgraph(&surucu,&grmod,"C:\\TC"); şeklinde kullanılmalıdır.
Turbo C'de varsayılan grafik modu (640,480) çözünürlüğe ayarlanmıştır. Bu modda, Çizim ekrenının sol-üst köşesine ait koordinat (0,0) olarak tanımlıdır. Varsayılan moddaki bazı koordinatlar Şekil 19.1'de gösterilmiştir.
![C DE GRAFİK Grafik-ekrani](http://www1.gantep.edu.tr/~bingul/c/images/grafik-ekrani.gif)
Şekil 19.1: Turbo C varsayılan moddaki koordinatlar
Bazı Grafik FonksiyonlarıBu bölümde Turbo C grafik fonksiyonlarının bazıları tanıtılmıştır. Bunların dışında biçok fonksiyon vardır. Bu fonksiyonlar derleyicinin başvuru kitabından veya derleyicinin yardım kısmından öğrenilebilir.
Tablo 19.1: graphics.h'te tanımlı bazı grafik fonksiyonları FonksiyonAçıklamamoveto(x,y);
Son noktayı (x,y) noktasına taşır
lineto(x,y);
Son noktadan (x,y) noktasına düz bir çizgi çizer.
line(x1,y1,x2,y2);
(x1,y1) noktasından (x2,y2) noktasına düz bir çizgi çizer.
circle(x,y,r);
Merkezi (x,y) olmak üzere yarıçapı r olan bir çember çizer.
arc(x,y,
baş_açı,
bit_açı,r);
Merkezi (x,y) noktasında ve yarıçapı r olan,
baş_açı açısından dan başlayıp
bit_açı açısına kadar bir yay çizer.
ellipse(x,y,
baş_açı,
bit_açı,xr,yr);
Elipsin bir parçası olan yayı, merkezi (x,y) ve yarıçapları xr, yr olacak biçimde
baş_açı açısındandan başlayarak
bit_açı açısına kadar bir yay çizer.
putpixel(x,y,
renk);
(x,y) noktasına verilen renkte bir nokta çizer.
rectangle(sol,üst,sağ,alt);
Sol üst köşesi (sol,üst) ve sağ alt köşesi (sağ,alt) koordinatlarında olacak şekilde bir dikdörtgen çizer.
bar(sol,üst,sağ,alt);
İki boyutlu ve taralı bir bar çizer.
bar3d(sol,üst,sağ,alt,derinlik,şapka);
Üç boyutlu ön yüzeyi taralı bar çizer. Şapka 0 ise barın üst kısmı çizilmez.
setcolor(renk);
Çizilen olan şeklin rengini belirler
setbkcolor(renk);
Arka alanın rengini belirler.
outtext(*
katar);
Grafik ekranında
katar yazdırır.
outtextxy(x,y,*
katar);
Grafik ekranında yazılacak
katar'ı, (x,y) ile belirlenen noktadan başlayarak yazar.
settextstyle(font,yön,boyut);
Ekranda yazılacak olan bir katarın yazıtipini, yönünü ve boyutunu belirler. yön=0 ise yatay, yön=1 ise dikey yazar.
cleardevice();
Ekranı temizler. DOS'taki CLS komutu gibi.
closegraph();
Grafik ekranını kapatıp normal yazı ekranına (DOS ekranı) döner.
Renk KodlarıGrafik ekranında kullanılan renkler 0-15 arasında renk kodları, yada simgesel sabit karşılıkları ile tanımlıdır. Bu tanımlamaların tamamı graphics.h'de şöyle bildirilmiştir (bkz graphics.h): enum COLORS {
BLACK, /* koyu renkler */
BLUE,
GREEN,
CYAN,
RED,
MAGENTA,
BROWN,
LIGHTGRAY,
DARKGRAY,
LIGHTBLUE, /* açık renkler */
LIGHTGREEN,
LIGHTCYAN,
LIGHTRED,
LIGHTMAGENTA,
YELLOW,
WHITE
};
Ayrıca bu kodları liste halinde Tablo 19.2 de bulabilirsiniz.
Tablo 19.2: conio.h ve graphics.h'te tanımlı Standart CGA Video Renk Kodları Renk (TR) Renk (EN) Renk
Örneği Renk Kodu Siyah
BLACK
0
Mavi
BLUE
1
Yeşil
GREEN
2
?
CYAN
3
Kırmızı
RED
4
Menekşe
MAGENTA
5
Kahverengi
BROWN
6
Açık Gri
LIGHTGRAY
7
Koyu Gri
DARKGRAY
8
Açık Mavi
LIGHTBLUE
9
Açık Yeşil
LIGHTGREEN
10
Açık ?
LIGHTCYAN
11
Açık Kırmızı
LIGHTRED
12
Açık Menekşe
LIGHTMAGENTA
13
Sarı
YELLOW
14
Beyaz
WHITE
15
Örnekler NOT
Buradaki örnek programlar Turbo C'nin editör ortamında derlenmiştir.
Program 19.1: Grafik ekranında; bir çizgi, bir çember, bir yay, bir dikdörtgen ve bir elips çizer
[color=gray] 1: /* 19prg01.c:
[color=gray] 2: Çizim ekranında bir çizgi, bir çember,
3: bir yay, bir dikdörtgen ve bir elips çizer.
[color:484e=gray:484e] 4: */
5: 6: #include <stdio>
7: #include <graphics>
8: 9: main()
10: {
11: int sur=DETECT,gmod;
12: 13: initgraph(&sur,&gmod,"");
/* grafik ekranını başlat */14: 15: line(12,12,298,198);
16: circle(200,100,75);
17: arc(200,100,90,180,50);
18: rectangle(10,10,300,200);
19: ellipse(320,240,0,180,50,70);
20: 21: getchar();
22: closegraph();
/* grafik ekranını kapat */[color:484e=gray:484e]23: }
Program çıktısı
Program 19.2: outtext, outtextxy, setcolor, settextstyle, setlinestyle fonksiyonları
[color=gray] 1: /* 19prg02.c:
[color=gray] 2: Bu program ekranda yatay ve dikey iki yazı yazar ve
3: farklı kalınlıkta iki çizgi çizer.
[color:484e=gray:484e] 4: */
5: 6: #include <graphics>
7: #include <stdio>
8: 9: main()
10: {
11: int surucu=DETECT,mod;
12: 13: initgraph(&surucu,&mod,"C:\\TC");
14: 15: setcolor(3);
16: outtext("Merhaba C.");
17: 18: setcolor(10);
19: outtextxy(30,40,"Bu yazi YATAY");
20: 21: setcolor(YELLOW);
22: settextstyle(1,1,5);
23: outtextxy(50,60,"Bu yazi DIKEY");
24: 25: setcolor(WHITE);
26: setlinestyle(3,0,1);
27: line(320,240,500,350);
28: 29: setcolor(RED);
30: setlinestyle(1,1,3);
31: circle(320,240,100);
32: 33: getchar();
34: closegraph();
35: }
[color:484e=gray:484e]36:
Program çıktısı
Program 19.3: y=f(x) ile belirlenen bir fonksiyonu çizer
[color=gray] 1: /* 19prg03.c:
2: (-20,+20) aralığında y=5*sin(x) fonksiyonunun grafiğini çizer. */ 3: 4: #include <graphics>
5: #include <stdio>
6: #include <math>
7: 8: main()
9: {
10: int sur=DETECT,grmode;
11: float x,y,olcek;
12: int X,Y;
13: 14: initgraph(&sur,&grmode,"C:\\TC");
15: 16: setcolor(BLUE);
/* x-y coordinatları mavi */17: line(0,240,640,240);
18: line(320,0,320,480);
19: 20: olcek=15.0;
/* Ölçek değiştirilerek zoom yapılabilir. */21: 22: setbkcolor(WHITE);
/* zemin rengi beyaz */23: setcolor(RED);
/* Fonksiyonun rengi kırmızı */24: 25: x=-20.0;
/* x değerleri [-20,20] aralığında */26: do
27: {
28: x += 0.01;
29: y = 5*sin(x);
/* y=5*sin(x) fonksiyonu */30: X = 320 + x*olcek;
/* Lineer Dönüşüm denklemleri */31: Y = 240 - y*olcek;
32: line(X,Y,X,Y);
/* Fonksiyon çiziliyor... */33: 34: }while(x<20.0);
35: 36: getchar();
37: closegraph();
[color:484e=gray:484e]38: }
Program çıktısı
![C DE GRAFİK Gr3](http://www1.gantep.edu.tr/~bingul/c/images/gr3.gif)