C Programlama Dili'ne Giriş

  Dersler
* Ö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

  C/C++ Derleyicileri
* Dev-C++
* Salford (silversoft FTN95)
* GCC
* Turbo C
* Eclipse IDE
* NetBeans IDE

  Dış Bağlantılar
* 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ı


Powered by PHP