Grafik
GRAFİK
C programlama dili, grafik modunda da zengin bir komut kütüphanesine sahiptir. Grafik komutları, graphics.h adlı header dosyanın altında bulunduğundan grafik programlarının başında #include<graphics.h> direktifi kullanılarak graphics.h header dosyası programa dahil edilmelidir.
A – GRAFİK MODUNA GEÇİLMESi
Bu bölüme gelinceye kadar yaptığımız bütün programlar TEXT modunda çalışırlar. TEXT modunda ekran 25 satır, 80 sütundan meydana gelmiştir. Grafik modunda ise ekran satır ve sütunlarla değil, pixel adı verilen noktalar şeklinde tanımlanmıştır. Satır ve sütun düzeninden, pixellerle tanımlanmış bir ekran düzenine geçmek için, grafik çizimleri yapan programlarda önce grafik
moduna geçilir. Böylece, ekranın TEXT modu ve GRAFİK modu olmak üzere
iki ayrı modda bulunabilecegini öğrenmiş oluyoruz. Şimdi de grafik moduyla İlgili açıklamalara geçelim,
Kullandığımız çeşitli bilgisayarlarda değişik özeliklerde ekranlar kullanılmaktadır. Grafik modundayken, bilgisayar ekran yönünden hassastır, başka
deyişle her grafik programı doğrudan doğruya her ekranda çalışmaz. Programın başında, grafik moduna geçilmesi ve kullanılan grafik adaptör tipi ile modunun tanımlanması gerekir.
initgraph () KOMUTU
Grafik programının başlangıcında, initgraph () komutu ile, kullanılan ekrana ait sürücü program ve ekranın duyarlılık (resolution) modu tanımlanır. Ekranlara ait sürücü programı, TURBO C komut kütüphanesinde bulunan .BGI uzantılı programdır. Bu nedenle grafik programı çalıştırılırken bu .BGI uzantılı dosyalar aktif sürücüde bulunmalıdır.
initgraph () komutunun sintaksı aşagidaki gibidir:
initgraph (grafik sürücü, grafik modu, yol);
initgraph ö komutunun parametreleri:
grafik sürücü: grafik sürücü program, daha önce de belirtildiği gibi .BGI uzantılıdosyalarda bulunmaktadır. Aşagidaki tabloda, grafik sürücü olarak tanımlanabilecek MAKROLAR ve bunların sayısal karşılıkları görülmektedir.
| Makro Sayısal karşılığı |
| DETECT 0
CGA 1 MCGA 2 EGA 3 EGA64 4 EGAMONO 5 IBM8514 6 HERCMONO 7 ATT400 8 VGA 9 PC3270 10 |
DETECT kullanılırsa, inîtgraph () komutu otomatik olarak mevcut ekranı ve bununla ilgili MAKRO’yu en yüksek duyarlılıkta seçer. Böylece, grafik sürücü ve duyarlılık modu en uygun şekliyle seçilmektedir.
grafik modu: Seçilecek grafik modu, aşağıdaki tabloda listelenenlerden bir tanesi olmalıdır.
Sürücü Mod Sayısal karşılığı Ekran duyarlılığı
(resolution)
| CGA | CGACO | 0 | 320 x 200 |
| CGAC1 | 1 | 320 x 200 | |
| CGAC2 | 2 | 320 x 200 | |
| CGAC3 | 3 | 320 x 200 | |
| CGAHI | 4 | 620 x 200 ] | |
| MCGA | MCGACO | 0 | 320 x 200 i |
| MCGAC1 | 1 | 320 x 200 | |
| MCGAC2 | 2 | 320 x 200 | |
| MCGAC3 | 3 | 320 x 200 | | |
| MCGAMED | 4 | 640 x 200 j | |
| MCGAHI | 5 | 640 x 480 | | |
| EGA | EGALO | 0 | 460 x 200 J |
| EGAHI | 1 | 640 x 350 • | |
| EGA64 | EGA64LO | 0 | 640 x 200 f |
| EGAG4H) | 1 | 640 x 350 J | |
| EGAMONO | EGAMONOHI | 0 | 640 x 350 f |
| HERC | HERCMONOHI | 0 | 720 x 348 f |
| ATT400 | ATT400CO | 0 | 320 x 20C f |
| ATT400C1 | 1 | 320 x 200 ^H | |
| ATT400C2 | 2 | 320 x 200 ^H | |
| ATT400C3
|
3 | 320 x 200 | |
| ATT400CMED | 4 | 640 x 200 | |
| ATT400CHI | 5 | 640 x 400 | |
| VGA | VGALO | 0 | 640 x 200 |
| VGAMED | 1 | 640 x 350 | |
| VGAHI | 2 | 640 x 480 | |
| PC3270 | PC3270HI | 0 | 720 x 350 |
| IBM8514 | 1BM8514LO | 0 | 640 x 480 |
| IBM8514HI | 1 | 1024×768 |
Ekran duyarlılığı (resolution) sütununda yazılı olan değerler, ekranın pixel(nokta) olarak tanımıdır, örneğin VHAGI ekran modunun karşılığında 640*480 sayıları bulunmaktadır. Bu demektir ki VGA tipi ekranlar bu modda çalışırken bir satir 460 pixel (nokta), bir sütun ise 480 pixel’den oluşmaktadır. Aşağıdaki şekilde VGAHI modunda çalıştırılan bir VGA ekranı oluşturan noktaların koordinatları verilmektedir.
0,0 639,0
0.479 639.479
Görüldüğü gibi ilk sayı pixelin yatay koordinatı, ikinci sayı ise pixelin dikey
koordinatıdır. Sol üstteki ilk nokta 0.0 noktasıdır. En üst satırda, soldan ikinci
noktanın koordinatı ise 1,0 olur. Sağ alt köşedeki pixel’in koordinatları 639,479’dur. Böylece ekran üzerindeki herhangi bir noktanın yeri, yatay ve dikey olarak tanımlanabilmektedir,
Grafik programlarda grafik sürücüsü ve grafik modu genellikle DETECT
kullanılarak otomatik olarak tanımlanır. Yine yol ” ” (çift tırnak) ile gösterilerek, sürücü programlarının bütün dizin ve alt dizinlerde aranması sağlanır. Grafik sürücüsü ve duyarlılık modu olarak tanımlanan değişkenler İnteger tipindedir. Aşağıda, en yaygın grafik tanımlama şekli olan DETECT kullanılarak tanımlamanın sintaksı görülüyor.
int gs=DETECT, gm;
initgraph (&gs, &gm, “”);
Görüldüğü gibi gm değişkenine DETECT makrosu atanarak grafik sürücü
ve grafik modunun otomatik olarak en uygun şekilde kurulması sağlanmıştır.
gs ve gm değişken adlarının yerine başka değişken isimleri de kullanılabilir.
Örneğin aşağıdaki tanımlama da geçerlidir.
int a=DETECT. b;
initgraph (&a, &b, ““);
Grafik programının sonunda closegraph () komutu kullanılarak grafik mo-
du sona erdirilir.
B – Line () KOMUTU İLE ÇİZGİ ÇİZiLMESi
line () komutu başlangıç ve bitiş koordinatları tanımlanmış olan çizgilerin
çizilmesinde kullanılır. Aşağıda, line () komutunun sintaksı görülmektedir.
line (x1, y1, x2, y2);
line () komutu, kooridanatları xl, y1 olan nokta ile x2, y2 olan nokta arasına
bir çizgi çizer, xl ve x2 yatay eksendeki y1 ve y2 ise dikey eksendeki değerlerdir
x1,y1
x2,y2
Çizginin rengi setcolor () komutu ile tanımlanır. Eğer herhangi renk tanımlanmamışsa çizgi beyaz renkte olur. setcolor () komutu, parametre olarak aşağıdaki değerleri alabilir;
| MAKRO | SAYISAL değer | RENK |
| BLACK | 0 | Siyah |
| BLUE | 1 | Mavi |
| GREEN | 2 | Yeşil |
| CYAN | 3 | Turkuaz |
| RED | 4 | Kırmızı |
| MAGENTA | 5 | Mor |
| BROVVN | 6 | Kahverengi |
| LIGHTGRAY | 7 | Açık gri |
| DARKGRAY | 8 | Koyu gri |
| LIGHTBLE | 9 | Açık mavi |
| LIGHTGREEN | 10 | Açık yeşil |
| LIGHTCYAN | 11 | Açık turkuaz |
| LIGHTRED | 12 | AÇIK KIRMIZI |
| LIGHTMAGENTA | 13 | AÇIK MOR |
| YELLOW | 14 | SARI |
| WHITE | 15 | BEYAZ |
Örneğin. setcolor (BLUE); komutundan sonra line () komutu kullanılarak çizilen çizgi mavi renkte olacaktır. Renk tanımı sırasında setcolor () komutunun parametresi olarak makro ismi yazılabileceği gibi bu renge karşılık olan sayı da yazılabilir, örneğin setcolor (GREEN) ve setcolor (2) komutları her ikisi de YEŞÎL rengi tanımlar. Çünkü GREEN makrosunun sayısal karşılığı 2’dir. Her iki yazım şekli de geçerlidir.
Aşagıdaki program, ekrana çeşitli renk ve özelliklerde çizgiler çizer.
/* Bu program ekrana çeşitli çizgiler çizer */
#include <stdio.h>
#include <graphics.h>
main()
{
int a=DETECT,b;
clrscr() ;
initgraph(&a,&b,””); /• grafik başlatma */
line(20,20,200.20);
setcolor(4) ;
line(20,40,200,40);
setcolor(BLUE) ;
line(20,60,200,60);
setcolor(GREEN);
setlinestyle(l,l,l);
line(20,80,200,80);
setcolor(YELLOW) ;
setlinestyle(3,l,3) ;
line(20,100,200,100);
getch() ;
closegraph();
}
Bu programda setcolor () komutu ile renk tanımı yapılmış, line () komutu
ile de çizgi çizilmiştir. Setcolor () komutu tarafından tanımlanan renk, yeni bir
setcolor () komutu ile yeni bir renk tanımlanana kadar, bütün komutlar için
geçerlidir, setlinestyle () komutu ile, çizginin kalınlığı ve özellikleri (düz, kesik,noktalı) tanımlanır, setlinestyle () komutunun parametreleri degiştirilerek çe-
şitli kalınlık ve özelliklerde çizgiler çizilebilir.
C – putpixel () KOMUTU
putpixel () komutu ile, ekranın koordinatları verilen bir yerine bir nokta konur. Yanyana noktalar konularak çeşitli çizgiler meydana getirilebilir, putpixel () komutunun sintaksı:
putpixel (x, y. r)
Bu komut, ekranın yatay düzlemde x, dikey düzlemde y koordinatıyla tanımlanan yere r ile tanımlanan renkte bir nokta koyar. Aşağıdaki programda for döngüsü kullanılarak ekrana yanyana noktalar konularak çizgiler meydana getirilmiştir.
#include <stdio.h>
#include <graphics.h>
main()
{
int a=DETECT,b,i;
clrscr() ;
initgraph{&a,&b, “”); /* grafik başlatma */
for(i=1; i<150; İ++)
putpixel(i,i,2);
for(i=1; i<200; i++)
putpixel(i,200,3);
for(i=220; İ<370;i++)
putpixel(50,i,4);
getch () ;
closegraph();
}
D – rectangle () KOMUTU ile DİKDÖRTGEN ÇİZİLMESi
rectangle () komutu, sol üst ve sağ alt koordinatları tanımlanan bir dikdörtgen çizer, rectangle () komutunun sintaksı:
rectangle (x1, y1, x2, y2);
Burada x1, y1, çizilecek olan dikdörtgenin sol üst köşesinin, x2 y2 ise sağ alt
köşesinin koordinatlarıdır. Aşağıdaki program, ekranın değişik yerlerine değişik renklerde iki tane dikdörtgen çizmektedir.
#include <stdio.h>
#include <graphics.h>
main() {
int a=DETECT ,b,i;
clrscr();
initgraph(&a,&b,” “);
setColor(YELLOW) ;
rectangle(20,20,300,100);
setcolor(CYAN) ;
rectangle(300,150,400,450);
getch() ;
closegraph() ;
E – circle () KOMUTU İLE DAİRE ÇİZİLMESİ
circle () komutu ile, ekrana merkezinin koordinatları ve yarıçapı verilen bir
daire verilir. Yarıçapın uzunluğu pixel cinsindendir. circle () komutunun sin-
taksı aşağıdaki gibidir.
circle (x, y, r)
Burada x ve y çizilecek olan dairenin koordinatları, r ise pixel cinsinden yarıçapıdır. Aşağıdaki programda ekrana 3 daire çizilmekte ve bu dairelerden iki
tanesinin içleri çeşitli renklerde desenlemektedir.
#include <stdio.h>
#include <graphics.h>
main()
{
int a=DETECT,b,i;
clrscr();
initgraph(&a,&b,” “) ;
setcolor(CYAN) ;
circle(100,100,70);
setcolor(14) ;
circle(250,100,70);
setfillstyle(3,14);
floodfill(250,l00,14);
setcolor(2) ;
circle(400,100,70);
setfillstyle(1,2);
floodfill(400,100,2);
getch();
closegraph();
F • ellipse () KOMUTU KULLANILARAK ELİPS ÇİZİLMESİ
Aşağıdaki program ekrana, merkezinin koordinatlarıyla küçük ve büyük ya-
rıçapı verilen bir elips çizer.
#include <stdio.h>
#include <graphics.h>
main()
{
int a=DETECT,b,i;
clrscr();
initgraph(&a,&b, “”);
setcolor(CYAN) ;
ellipse(150,100,0,360,100,60);
setcolor(YELLOW) ;
ellipse(150,250,90,360,110,60);
getch() ;
closegraph();
}
