* Önsöz
* Giriş
* Veri Tipleri, Değişkenler
* Operatörler
* Temel G/Ç Fonksiyonları
* Temel Kütüphane Fonksiyonları
* Karşılaştırma Deyimleri
* Döngüler
* Fonksiyonlar I
* Fonksiyonlar II
* Diziler
* Gösterici (Pointer) Kavramı
* Katarlar (Stringler)
* Dinamik Bellek Yönetimi
* Gösterici Uygulamaları
* Yapılar ve Birlikler
* Dosya Yönetimi
* Bit Düzeyinde Çalışmak
* Port Denetimi
* Grafik Kullanımı
* C Makroları
* Kısaca C++
* Derleme Seçenekleri
* Tarih-Saat Fonksiyonları
* Monte-Carlo Yöntemleri
* Fortran ve C
* Yararlanılan Kaynaklar
* Dev-C++
* Salford (silversoft FTN95)
* GCC
* Turbo C
* Eclipse IDE
* NetBeans IDE
* programlama.com
* C Programcıları Derneği
* C (wikipedia)
* C++ (wikipedia)
* cplusplus.com
* koders.com
* Hot scripts
|
|
Ders 19: Grafik Kullanımı
###################- (%95)
|
En son güncelleme: Wed, 30 Nov 2011 13:22:02 +0200
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.
19.1 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.h>
#include <stdlib.h>
...
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.
Şekil 19.1: Turbo C varsayılan moddaki koordinatlar
19.2 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ı
Fonksiyon |
Açıklama |
moveto(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. |
19.3 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 |
19.4 Ö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
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
|
/* 19prg01.c
Çizim ekranında bir çizgi, bir çember,
bir yay, bir dikdörtgen ve bir elips çizer. */
#include <stdio.h>
#include <graphics.h>
int main()
{
int sur = DETECT, gmod;
/* grafik ekranını başlat */
initgraph(&sur,&gmod,"");
line (12, 12, 298, 198);
circle (200, 100, 75);
arc (200, 100, 90, 180, 50);
rectangle (10, 10, 300, 200);
ellipse (320, 240, 0, 180, 50, 70);
getchar();
closegraph(); /* grafik ekranını kapat */
return 0;
} |
Program çıktısı
Program 19.2: outtext, outtextxy, setcolor, settextstyle, setlinestyle fonksiyonları
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
|
/* 19prg02.c
Bu program ekranda yatay ve dikey iki yazı yazar ve
farklı kalınlıkta iki çizgi çizer. */
#include <graphics.h>
#include <stdio.h>
int main()
{
int surucu=DETECT,mod;
initgraph(&surucu,&mod,"C:\\TC");
setcolor(3);
outtext("Merhaba C.");
setcolor(10);
outtextxy(30,40,"Bu yazi YATAY");
setcolor(YELLOW);
settextstyle(1,1,5);
outtextxy(50,60,"Bu yazi DIKEY");
setcolor(WHITE);
setlinestyle(3,0,1);
line(320,240,500,350);
setcolor(RED);
setlinestyle(1,1,3);
circle(320,240,100);
getchar();
closegraph();
return 0;
}
|
Program çıktısı
Program 19.3: y=f(x) ile belirlenen bir fonksiyonu çizer
01:
02:
03:
04:
05:
06:
07:
08:
09:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
|
/* 19prg03.c
x : [-20, 20] aralığında y= 5 * sin(x) fonksiyonunun grafiğini çizer. */
#include <graphics.h>
#include <stdio.h>
#include <math.h>
int main()
{
int sur = DETECT, grmode;
float x,y,olcek;
int X,Y;
initgraph(&sur, &grmode, "C:\\TC");
setcolor(BLUE); /* x-y coordinatları mavi */
line(0,240,640,240);
line(320,0,320,480);
olcek = 15.0; /* Ölçek değiştirilerek büyütme/küçültme yapılabilir. */
setbkcolor(WHITE); /* zemin rengi beyaz */
setcolor(RED); /* Fonksiyonun rengi kırmızı */
x=-20.0; /* x değerleri [-20,20] aralığında */
do
{
y = 5*sin(x); /* y=5*sin(x) fonksiyonu */
X = 320 + x*olcek; /* Lineer Dönüşüm denklemleri */
Y = 240 - y*olcek;
line(X, Y, X, Y); /* Fonksiyon çiziliyor... */
x += 0.01;
}while( x<=20.0 );
getchar();
closegraph();
return 0;
} |
Program çıktısı
|