C dili

C Dilinde Graphics.h Kütüphanesi 1. Bölüm

Merhabalar bu yazımda graphics.h kütüphanesini inceledim. Bu yazımı sinyaller sistemler dersindeki ödevleri C diliyle yapamaz mıyım diye düşünerek başladığım maceram sırasında elde ettiğim notları ve tecrübeleri kullanarak yazdım.Fakat bilgim sınırlı olduğundan tüm graphics.h kütüphanesini anlatamadım. Kalanı gelecek yaz yazacağım 2. ve 3. bölümde olacak.  (Not : Bu yazı okuyan kişileri kendilerine ait crack matlab sürümlerini silip lisanslı ürün kullanmaya başlatacak seviyede minnettar bırakabilir.)

Bu yazıdaki tüm örnekler Devc++ derleyicisi üzerinden anlatılmıştır. Bu derleyicide  hazır olarak graphics.h kütüphanesi bulunmaz.Bunun için buradaki  graphics.h kütüphanesini ekleyebilirsiniz.

Yazının ikinci bölümüne buradan ulaşınız: https://fatihalparslann.wordpress.com/2020/10/24/c-c-dilinde-graphics-h-kutuphanesi-2-bolum/

Graphics.h ile ilgili Örnekler:

Oyun/Game

Örnek1

Örnek2 

Örnek3

Eğer derleyicinizde aşağıdaki resimdeki gibi hata alıyorsanız videodaki işlemleri(derleyiciyi tekrar kurmanıza ve dosyayı tekrar indirmenize gerek yok.) tekrar edebilirsiniz.10

initgraph() Fonksiyonu

Bu fonksiyon seçilen grafik sürücüsünden grafik sisteminin yüklenmesini ve istenen grafik modunda çalıştırılmasını  sağlar. fonksiyonun genel gösterimi şöyledir:

void initgraph(int *graphdriver, int *graphmode, char *pathtodriver);

Bu fonksiyonu kullanabilmemiz için öncelikle grafik sürücüsünün macro değerini atayacağımız bir ile grafik modunu atayacağımız bir başka değişken tanımlamalıyız. Bunun için aşağıdaki değerlerden yararlanabiliriz.

graphics sürücülerini temsil eden macrolar  macroların sayısal karşılıkları
DETECT 0 (Sürücünün ve grafik modunun otomatik seçilmesini sağlar. )
CGA 1
MCGA 2
EGA 3
EGA64 4
EGAMONO 5
IBM8514 6
HERCMONO 7
ATT400 8
VGA 9
PC3270 10

Bu sürücüler grafik sistemini  bünyelerinde barındırdıkları farklı çözünürlük ve renk kapasitelerine sahip grafik modları ile çalıştırırlar. Eger mod değişkeni tanımlanmış fakat o değişkene bir macro değişken veya o macroyu temsil eden sayı atanmamışsa initgraph fonksiyonu en yüksek çözünürlüklü modu seçer.

C0, C1, C2 ve C3’ten oluşan 4 adet pallet listesi elemanları   CGA ve CGA’ya uyumlu sistemlerde tarama fonksiyonları kullanılarak oluşturulan alanların renklendirilmesi için kullanılabilecek renkleri içerir.Bu sürücüde diğer renkler bu iş için kullanılamaz

Palette Numarası   Üçlü Renk Paketi
0 Açık yeşil Açık Kırmızı Yeşil
1 Açık CYAN AçıkMAGENTA Beyaz
2 Yeşil Kırmızı Kahverengi
3 CYAN MAGENTA Açık Gri
Graphics       
Sürücüsü graphics_mode    Değerler     SütunxSatır Palette özelliği
CGA CGAC0 0 320 x 200 C0
CGAC1 1 320 x 200 C1
CGAC2 2 320 x 200 C2
CGAC3 3 320 x 200 C3
CGAHI 4 640 x 200 2 renk
MCGA MCGAC0 0 320 x 200 C0
MCGAC1 1 320 x 200 C1
MCGAC2 2 320 x 200 C2
MCGAC3 3 320 x 200 C3
MCGAMED 4 640 x 200 2 renk
MCGAHI 5 640 x 480 2 renk
EGA EGALO 0 640 x 200 16 renk
EGAHI 1 640 x 350 16 renk
EGA64 EGA64LO 0 640 x 200 16 renk
EGA64HI 1 640 x 350 4 renk
EGA-MONO EGAMONOHI 3 640 x 350 2 renk
EGAMONOHI 3 640 x 350 2 renk
HERC HERCMONOHI 0 720 x 348 2 renk
ATT400 ATT400C0 0 320 x 200 C0
ATT400C1 1 320 x 200 C1
ATT400C2 2 320 x 200 C2
ATT400C3 3 320 x 200 C3
ATT400MED 4 640 x 200 2 renk
ATT400HI 5 640 x 400 2 renk
VGA VGALO 0 640 x 200 16 renk
VGAMED 1 640 x 350 16 renk
VGAHI 2 640 x 480 16 renk
PC3270 PC3270HI 0 720 x 350 2 renk
IBM8514 IBM8514HI 0 640 x 480 256 renk
IBM8514LO 0 1024 x 768 256 renk

Bu fonksiyonda son olarak char *pathdriver yerine “” içinde sürücün adresi yazılabilir. fakat bunun yerine “” yazmak veya içine yanlış adres girilse bile program sabit diske giderek sürücüyü bulur.

initwindow() fonksiyonu

Bu fonksiyon winbgim uygulaması üzerinde çalışan initgraph fonksiyonunun işlevini yerine getirebilen bir fonksiyondur. Bu fonksiyonda initgraph() fonksiyonundaki conio.h kütüphanesine gerek yoktur.genel gösterimi şöyledir;

#include “graphics.h”

int initwindow(int width, int height, const char* title=”Windows BGI”, int left=0, int top=0, bool dbflag=false, closeflag=true);

Bu fonksiyonun sadece ilk iki değeri(width=geniişlik,height=yükseklik)kullanıcı tarafından belirlenebilir diğer değerler sabittir ve kullanıcın belirtmesine gerek yoktur.

3

closegraph() Fonksiyonu

Closegraph, grafik sistemi tarafından kullanılan tüm belleği serbest bırakır sonra ekranı initgraph’ı kullanılmadan önceki moda geri yükler.  Closegraph() fonksiyonunu genel gösterimi söyledir:

#include void closegraph(int wid=ALL_WINDOWS); veya

#include void closegraph(int wid=CURRENT_WINDOW);

Bu fonksiyon içine hiç değer yazılmadan kullanıldığında ALL_WINDOWS parametresi  işlevi görür.

delay(int milisaniye)fonksiyonu

Bu fonksiyon winbgim uyumlu olup,  programı içine yazılan milisaniye değeri kadar bekletir.4

bar fonksiyonu

Bu fonksiyon dikdörtgen şeklinde iki boyutlu alanın taranmasını sağlar. Gelen gösterimi şöyledir:

#include

void bar(int left, int top, int right, int bottom);

left ve right değerleri en sol sütundan itibaren alınan yatay uzaklık değerleri olup taralı alanın genişliğini ortaya koyarlar.left>right veya leftbottom veya top

5.jpg6

bar3d() fonksiyonu

Bu fonksiyon  3 boyutlu dikdörtgen şekiller çizmemizi sağlar. Genel ifadesi şöyledir;

bar3d(int left, int top, int right, int bottom, int depth, int topflag);

Bu fonksiyonda ilk 4 parametrenin işlevi bar fonksiyonuyla aynıdır. Fonksiyona 3 boyut özelliği kazandıran depth(derinlik parametresi) cismin yan üst ve alt kenar uzunluklarının kendilerine ait başlangıç noktalarana göre dikey uzaklıklarını verir. topflag parametresi sıfır olursa cismin üstten görünümü olmaz, bu parametre 1 ve üstü değerler aldığında cismin üst görünümü elde edilir.

78

rectangle fonksiyonu

Bu fonksiyonun genel gösterimi şöyledir;

void rectangle(int left, int top, int right, int bottom);  Bu fonksiyon sol üst köşedeki asıl referans noktasına göre left ve right birim yatay kadar uzaklıkta sırasıyla sol ve sağ kenarları, top ve bottom birim kadar dikey uzaklıkta sırasıyla üst ve alt kenarları olan bir dikdörfen oluşturur.

circle() fonksiyonu

Bu fonksiyon x en sol sütundan sağ sütuna doğru olan uzaklığı ve y en üst satırdan en alt satıra doğru olan dikey uzaklığı belirtmek üzere r yarıçaplı çember çizmemizi sağlar. genel gösterimi

void circle(int x, int y, int r);

78

line() fonksiyonu

Bu fonksiyonun gösterimi şöyledir;

void line (int x1,int y1, int x2, int y2); bu fonksiyon (x1,y1) noktası ile (x2,y2) noktası arasında bir doğru çizer.

78

lineto() Fonksiyonu

Bu fonksiyonun genel gösterimi şöyledir; void lineto(int x,int y) . Bu fonksiyon başlangıç noktasından sol üst köşede yer alan asıl referans noktasına göre belirlenmiş olan (x,y) noktasına bir doğru çizer.Eğer bu fonksiyon için başlangıç noktası moveto ve moverel fonksiyonları ile belirlenebileceği gibi kendisinden önce bir lineto çizimi yapılmışsa veya linerel çizimi varsa başlangıç noktası, bu çizimlerin bitiş noktası olarak alınır. Eğer kendisinden önce yukarıda belirtilen fonksiyonlar kullanılmamışsa bu fonksiyon başlangıç noktasını sol üste yer alan referans noktası olarak alır.

moveto() fonksiyonu

Bu fonksiyonun gösterimi şöyledir;

void moveto(int x, int y); Bu fonksiyon lineto ve linerel fonksiyonları ile beraber kullanılır ve Bu fonksiyonlarla doğru çizimi yapılırken onlar için başlangıç noktası oluşturur.  Bu fonksiyonun line fonksiyonuna bir etkisi yoktur. Bu fonksiyon başlangıç noktasını sol üst köşedeki referans noktasına göre x kadar yatay uzaklığa ve aynı noktaya göre y kadar dikey uzaklığa götürür.

78

linerel()fonksiyonu bu fonksiyonun genel gösterimi şöyledir;void linerel(int dx,dy). Bu fonksiyon başlangıç noktasından itibaren yine aynı başlangıç noktasına göre dx yatay uzaklığa ve dy dikey uzaklığa bir doğru çizer. Bu fonksiyon için başlangıç noktası moveto ve moverel fonksiyonları ile belirlenebileceği gibi kendisinden önce bir lineto çizimi yapılmışsa veya linerel çizimi varsa başlangıç noktası, bu çizimlerin bitiş noktası olarak alınır. Eğer kendisinden önce yukarıda belirtilen fonksiyonlar kullanılmamışsa bu fonksiyon başlangıç noktasını sol üste yer alan referans noktası olarak alır.linerel fonksiyonu parametreleri  lineto() fonksiyonundakilerden farklı olarak (-) negatif tam sayı değerleri alabilirler.

moverel() fonksiyonu

Bu fonksiyonun genel gösterimi şöyledir; void moverel(int dx,int dy). Bu fonksiyon yeni oluşturulacak başlangıç noktasını bir öncekinin yatayda dx kadar uzaklıkta dikeyde dy kadar uzaklıkta olan bir noktaya taşır. Bu fonksiyon için başlangıç noktası moveto ve moverel fonksiyonları ile belirlenebileceği gibi kendisinden önce bir lineto çizimi yapılmışsa veya linerel çizimi varsa başlangıç noktası, bu çizimlerin bitiş noktası olarak alınır. Eğer kendisinden önce yukarıda belirtilen fonksiyonlar kullanılmamışsa bu fonksiyon başlangıç noktasını sol üste yer alan referans noktası olarak alır. moverel fonksiyonu parametreleri  linerel () fonksiyonundakiler gibi  farklı  (-) negatif tam sayı değerleri alabilirler.

78

arc() Fonksiyonu

Bu fonksiyon açılan pencerede bir yay çizilmesini sağlar genel ifadesi şöyledir:

void arc(int merkezyatay, int merkezdikey,int başlangıçaçısı, int bitişaçısı, int çap); merkezyatay parametresi yayın merkezinin yatay bileşeninin(koordinat düzleminde x olarak ifade edilir.)açılan pencerenin sol üst köşesindeki beyaz nokta ile gösterilen referans noktasına olan uzaklığını tutar. İnt merkezdikey parametresi(koordinat düzleminde y) merkez olarak kullanılacak olan noktanın dikey bileşeninin referans noktasına olan dikey uzaklığını gösterir. İnt başlangıç açısı merkez noktasının  yatay ekseninden saat yönünün tersi yönde pozitif olarak artan yayın başlangıç noktasının açısını verir. int bitişaçısı bitiş noktasının yatay eksene olan açısal uzaklığını verir.

örnek uygulama

1

2

pieslice fonksiyonu

Bu fonksiyonun genel gösterimi şöyledir;
void pieslice(int x, int y, int stangle, int endangle, int radius). Bu fonksiyon radius yarı çaplı merkezi (x,y) noktasında olan ve başlangıç noktasının stangle kadar ,bitiş noktasının endangle merkezden geçen yatay eksenden uzakta olduğu taralı bir kesit oluşturur.

78

ellipse fonksiyonu

Bu fonksiyonun genel gösterimi

void ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius) bu fonksiyon merkezi (x,y )noktasında olan yatay eksene göreve saat yönünün tersi yönde artarak stangle derece kadar  uzakta başlayan ve endangle derece kadar uzakta biten bir eliptik şekil çizmeye yarar. xradius yatayda merkezden göre alınan yarıçapı,yradius ise dikeye göre merkezden alınan yarıçapı verir.Bu fonksiyon girilen stangle ve endangle değerlerine göre tam bir elips çizebileceği   gibi eliptik bir yay da çizebilir.

Sector() fonksiyonu

void sector( int x, int y, int stangle, int endangle, int xradius, int yradius);

Genel gösterimi yukarıdaki gibi olan bu fonksiyon merkezi (x,y) noktası olan merkezden geçen yatay eksen 0 derece kabul edildiğinde  başlangıç noktası ve bitiş noktası  saat yönünün tersi yönde sırasıyla stangle ve endangle derece uzaklıkta olan eliptik bir taralı şekil oluşturur. xradius bu şeklin yatay eksendeki yarı çapı,yradius ise bu şeklin y eksenindeki yarıçapıdır.

fillellipse fonksiyonu

Bu fonksiyonun genel gösterimi

void fillellipse(int x, int y, int xradius, int yradius); şeklindedir. Bu fonksiyon merkezi noktasında olan ve xradius ve yradius uzunluklarında iki yarıçapa sahip içi renkle doldurulabilir şekilde taranmış tam bir elips çizer

78

drawpoly() fonksiyonu

Bu fonksiyon üçgen,dörtgen beşgen gibi şekillerin çizilmesinde kullanılır genel gösterimi;

void drawpoly( int num, int *polypoints );

Bu fonksiyonda çizilecek şeklin kenar sayısına x dersek num (x+1) değerine sahip olmalı,polypoints[]={a,b,c,d,e,f…a,b}dizisi de 2*(x+1) elemana sahip olmalıdır. Bunun sebebi şeklin kapalı bir şekil olaması için çizimin tekrar başladığı noktaya dönmesi gerekir ve polypoints olarak ifade ettiğimiz dizimizde ilk köşeyi belirten( x,y)=(a,b) hem ilk eleman hem de son eleman olarak yazılır. Polypoints dizisindeki elemanlar sol baştan başlayarak ikişerli gruplandırılarak köşegenlere ait koordinatları gösterirler((a,b),(c,d),(e,f)…(x,y)…(a,b)) guruplandırmada ki ilk eleman olan x refrans noktası olan sol üst köşeye olan yatay uzaklığı,y ise aynı köşeyeolan dikey uzaklığı belirtir.

78

fillpoly() fonksiyonu

Bu fonksiyonun gösterimi

void fillpoly( int num, int *polypoints ); şeklindedir ve çalışması tamamen drawpoly fonksiyonu ile aynıdır. ilave olarak şeklin içini boyanabilecek şekilde tarar.78

floodfill fonksiyonu

Bu fonksiyonun gösterimi

void floodfill(int x, int y, int border); şeklindedir ve bir şekil çizen fonksiyondan sonra programa tanıtılır ve şekil çizen fonksiyondan önce belirtilen setcolor fonksiyonu ile kullanılır.Eğer x,y noktası çizilen şeklin içinde kalıyorsa şeklin içi boyanabilecek şekilde taranır ve şeklin dış sınırları border parametresinin sahip olduğu sayının temsil ettiği renkte olur.

Eğer x,y noktası çizilen şeklin dışında  kalıyorsa şeklin dışı  boyanabilecek şekilde taranır ve şeklin dış sınırları border parametresinin sahip olduğu sayının temsil ettiği renkte olur. 7

setlinestyle() fonksiyonu

void setlinestyle(int linestyle, unsigned upattern, int thickness); şeklinde gösterilen fonksiyon line,linerel,lineto,rectangle,drawpoly,bar3d,circle,arc,pieslice,ellipse,sector,fillellipse,fillpoly fonksiyonlarında çalışırken bar fonksiyonunda çalışmaz. Fonksiyonun ilk parametres iolan ve çizim hatlarımızın türünü belirleyen linestyle deyimleri şöyledir;

ad Rakamsal karşılığı açıklama
SOLID_LINE 0 Tam hat
DOTTED_LINE 1 Noktalı hat
CENTER_LINE 2 Merkeze doğru kalınlaşan ayrık çizgilerden oluşan hat
DASHED_LINE 3 Kesikli hat
                     USERBIT_LINE 4 Kullanıcı tarafından tanımlanır.

İkinci parametre olan thickness parametresi hat kalınlığını verir. ve iki deyimi vardır.fakat bu deyimlerin sayısal değerlerinin haricinde değerler girirlirse hat kalınlığı bu değerleri referans alarak artar ve ya azalır.

NORM_WIDTH 1 1 pixel genişlik
THICK_WIDTH 3 3 pixel genişlik

ikinci parametre olan upattern parametresi kullanıcı tarafından numaralandırılmış ve yine kullanıcı tarafından tasarlanmış parametreleri seçmek için kullanılır. İhmaal edildiğinden  herhangi bir değer verilebilir.

centered line türünde bir kapalı bir şekil yeterli kalınlık değerini alırsa merkezi doldurarak taralı şekil oluşturabilir. Böylece setcolor fonksiyonu ile setfillstyle fonksiyonu işlevi gerçekleştirilebilir.

setcolor fonksiyonu

Renk fonksiyonlarını kullanırken renklerin geçerli deyimlerini ve bunların hex karşılıklarını öğrenmemiz gerekir. C dilinde renklerin hex kodlarını öğrenmek için system(“COLOR HEX”); komutu kullanılır. Bunun sonucunda konsol ekranında bilgiler elde edilir.(NOT: system fonksiyonu programı durdurur ve  fonksiyondan sonra programın devam etmesi için  herhangi bir tuşa basılmalıdır.)

8.jpg

void setcolor(int color); şeklinde gösterilen fonksiyonumuz yukarıdaki resimde gösterilen renk kodlarından birini değişken olarak aldığında ,kendisinden daha sonra gelen fonksiyonlar tarafından çizilmiş tüm doğruları ve şekil kenarlarını o renge boyar. başka bir setcolor fonksiyonu ile renkler değiştirilebilir.

78

setfillstyle() fonksiyonu

setfillstyle(int pattern,int color) şeklinde gösterilen fonksiyon kendisinden sonra gelen taralı alanları sınırlarını boyamadan desen(pattern) ve renk kodlarına göre boyar.boyama rengi başkabir setfillstyle komutuyla değişebilir.

Bu fonksiyon için kullanılan      rakamsal karşılı

desen deyimleri

EMPTY_FILL,                                     0                                             boşgiriş /siyaha boyama

SOLID_FILL,                                       1                                            Tam doldurma

LINE_FILL,                                         2                                              satır doldurma

LTSLASH_FILL,                                 3                                              hafif vurgulu slaş işareti

SLASH_FILL,                                      4                                              slaş işareti

BKSLASH_FILL,                                 5                                              ters slaş işareti

LTBKSLASH_FILL,                             6                                             hafif vurgulu ters slaş işareti

HATCH_FILL,                                      7                                            karelere bölerek tarama/ekose

XHATCH_FILL,                                   8                                              çapraz karelere bölme/deltoid

INTERLEAVE_FILL,                           9                                            piksel doldurma

WIDE_DOT_FILL,                             10                                           uzak noktasal doldurma

CLOSE_DOT_FILL,                           11                                             sık noktasal doldurma

USER_FILL                                          12                                            kullanıcı tanımlı doldurma.

78

outtext() fonksiyonu

Bu fonksiyon başlangıç noktasından itibaren yazı yazmaya yarar genel gösterimi şöyledir; void outtext(char *textstring). Bu fonksiyon için başlangıç noktası moveto ve moverel fonksiyonları ile belirlenebileceği gibi kendisinden önce lineto çizimi yapılmışsa veya linerel çizimi varsa başlangıç noktası, bu çizimlerin bitiş noktası olarak alınır. Eğer kendisinden önce yukarıda belirtilen fonksiyonlar kullanılmamışsa bu fonksiyon başlangıç noktasını sol üste yer alan referans noktası olarak alır.

outtextxy() fonksiyonu

Bu fonksiyon outtext fonksiyonundan farklı olarak string başlangıcını belirli bir (x,y) noktasına taşır.Bu fonksiyonun genel gösterimi; void outtextxy(int x,int y,”char *stringtext”).

78

settextstyle() fonksiyonu

void settextstyle( int font, int direction, int size); şeklinde gösterilen fonksiyon kendisinden sonra kullanılan pencereye yazı yazma fonksiyonlarını sonuç yazılarının yazı tipini,doğrultusunu ve boyutunu belirler. Bu fonksiyonun ilk parametresi olan font parametresi enum türünde olan aşağıdaki deyimleri ve onların rakamsal kodlarını alabilir.

isim                             sayısal kodlar

DEFAULT_FONT,                 0

TRIPLEX_FONT,                    1

SMALL_FONT,                       2

SANS_SERIF_FONT,             3

GOTHIC_FONT,                     4

SCRIPT_FONT,                       5

SIMPLEX_FONT,                    6

TRIPLEX_SCR_FONT,          7

COMPLEX_FONT,                  8

EUROPEAN_FONT,               9

BOLD_FONT                           10

ikinci parametre olan direction parametresi farklı sayısal değerler için farklı doğrultularda yazılar üretse de genelde yatay yazı için HORIZ_DIR, dikey içinse de VERT_DIR  parametreleri kullanılır. size parametresine 1 den itibaren artan sayısal değerler verilerek yazı boyutu değiştirilebilir.Eğer size parametresine 0 değeri verilirse pencerede yazı görünmez ve program hata vererek çalışmayı durdurur. Bu fonksiyon kullanılmadığında program varsayılan olarak belirlenmiş olan settextstyle(DEFAULT_FONT,HORIZ_DIR,1); komutunu kullanır.

ftff

8

cleardevice() fonksiyonu

Bu fonksiyon ekranda yeralan tüm şekillerin ve renkleri silinerek ekranın varsayılan sistem rengine geri dönmesine ve temizlenmesine neden olur.Son durumda imleç (0,0) konumuna gelir.

7.jpg

Kaynak:

eitworld.com

programmingsimplified.com

http://www.cs.colorado.edu

C Dilinde Graphics.h Kütüphanesi 1. Bölüm&rdquo için 3 yorum

  1. Mehmet Erdem

    Benim işim komplex değil. x eksenim 1-2-3- diye gidecek. y eksenimdeki sayılar değişiyor. x,y grafiği lazım.

    Beğen

  2. şükrü

    ilk resimdeki hatayı aldım yav trilyon kere denedim olmadı

    Beğen

fatihalparslan2 için bir cevap yazın Cevabı iptal et

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

%d blogcu bunu beğendi: