Genel

C/C++ Dilinde Graphics.h Kütüphanesi 2. Bölüm

kbhit();

Yukarıdaki fonksiyon klavyeden giriş olmadığı zaman sıfır, klavyeden giriş varsa sıfır olmayan değer geri döndürür.

Buradan Mausex veMausey fonksiyonlarına kadar olan kısmın anlatıldığı video:

Mause İşlemleri

Aşağıda göreceğimiz fonksiyonlara gönderilen kind argümanlarını inceleyelim.

WM_MOUSEMOVE

Mause hareketinin tespit edilmesini sağlar.

WM_LBUTTONDBLCLK

Mause’un sol butonuna çift tıklanmasını tespit eder.

WM_LBUTTONDOWN

Mause’un sol butonunun aşağıya doğru basılı olduğu durumu tespit eder.

WM_LBUTTONUP

Mause’un sol Butonuna basıldıktan sonra butonun serbest kalıp yukarı hareket etmesini tespit eder.

WM_MBUTTONDBLCLK

Mause’un orta butonuna çift tıklanmayı tespit eder.

WM_MBUTTONDOWN

Mause’un orta butonuna aşağıya doğru basıldığı anı tespit eder.

WM_MBUTTONUP

Mause’un orta butonunun basıldıktan sonra serbest bırakıldığı durumu tespit eder.

WM_RBUTTONDBLCLK

Mause’un sağ butonuna çift tıklanması durumunu tespit eder.

WM_RBUTTONDOWN

Mause’un sağ butonunun aşağıya doğru basıldığı durumu tespit eder.

WM_RBUTTONUP

Mause’un sağ butonunun basıldıktan sonra yukarı doğru hareket etmesini tespit eder.

void clearmouseclick(int kind) 

Yukarıdaki fonksiyon aldığı kind argümanına uyan bir olay gerçekleştiğinde oluşan bildirimi temizler.

bool ismouseclick(int kind);

Yukarıdaki fonksiyon aldığı kind argümanına uyan bir islenmemiş olay varken çalışırsa TRUE değerini döndürür. Aksi halde false döndürür.

void getmouseclick( int kind, int& x, int& y )

Yukarıdaki fonksiyon aldığı kind argümanına uygun işlenmemiş bir mause olayı varsa, bize tıklamanın x ve y koordinatlarını verir. Eğer işlenmemiş bir mause olayı yoksa , x ve y için bize -1 değerini gönderir. Bu fonksiyon ayrıca ilgili mause olayının işlenmesini sağlar.


#include "graphics.h"
int main(void)
{
int x,y;//mause'ın tıklandığı koordinatları tutarlar.
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
setcolor(9);
setlinestyle(SOLID_LINE,0,10);
//Bir kare cerceve olusturuldu.
line(80,80,380,80);
line(80,380,380,380);
line(80,80,80,380);
line(380,80,380,380);
settextstyle(DEFAULT_FONT, HORIZ_DIR, 2);
outtextxy(20, 20, "Mause ile Sol Tiklayin");
while (!ismouseclick(WM_LBUTTONDOWN))
{
printf("1. tiklamadi.");
delay(500);
}
clearmouseclick(WM_LBUTTONDOWN) ;//Mause event temizlendi.
getmouseclick(WM_LBUTTONDOWN, x, y);
printf("1. tiklama koordinatlari ");
printf("1. x=%d\n",x);
printf("1. y=%d\n",y);
//Bu sefer while'dan sonra clearmouseclick() kullanilmadi.
while (!ismouseclick(WM_LBUTTONDOWN))
{
printf("2. tiklamadi.");
delay(500);
}
getmouseclick(WM_LBUTTONDOWN, x, y);
printf("2. tiklama koordinatlari ");
printf("2. x=%d\n",x);
printf("2. y=%d\n",y); closegraph( );
}

Buradan Resim Fonksiyonlarına kadar olan kısmın anlatıldığı video:

int mousex( ); 
int mousey( );

Yukarıdaki iki fonksiyon açılan grafik penceresi üzerinde mause’un x ve y koordinatlarını verir. alabilecekleri minimum değer sıfır. Maksimum dğer ise pencerenin x veya y eksenlerindeki maksimum değerdir.


#include "graphics.h"
int main(void)
{
int x,y;//mause'ın tıklandığı koordinatları tutarlar.
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
while(1){
x= mousex( );
y=mousey( );
printf("x:%d\ty:%d\n",x,y);
setcolor(14);
sector(x,y,0,360,10,10);
delay(10);
cleardevice();
}
closegraph( );
}
void registermousehandler( int kind, void h( int, int ) );

Yukarıdaki fonksiyon programın herhangi bir yerinde ilgili kind ardümanına karşılık gelen bir mause olayı(mause event) gerçekleşirse otomatik olarak bu fonksiyonun gösterdiği h fonksiyonu çağırılır. h fonksiyonunan gönderilen iki int parametre x ve y koordinatlarıdır.

#include "graphics.h"
void click_handler(int x, int y)
{
clearmouseclick(WM_LBUTTONDOWN) ;
printf("x:%d\ty:%d\ttiklandi\n",x,y);
}
int main(void)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
registermousehandler(WM_LBUTTONDOWN, click_handler);
while (1)
{
printf("\nsonsuz_dongu\n");
delay(1000);
}
closegraph( );
}

Resim Fonksiyonları

Burandan putpixel fonksiyonuna kadar anlatılan bölümün videosu :

void getimage(int left, int top, int right, int bottom, void *bitmap);

Yukarıdaki fonksiyon grafik penceresindeki belli bir dikdörtgen aralıktaki pikselleri bit resim olarak hafızaya kaydeder. left argümanı kaydedilecek olan dikdörtgen alanın en sol kenarına karşılık gelen doğrunun x koordinatıdır. right argümanı dikdörtgen alanın sağ kenarına karşılık gelen doğrunun x koordinatıdır. top argümanı dikdörtgen alanın üst kenarına karşılık gelen doğrunun y koordinatıdır. bottom argümanı dikdörtgen alanın alt kenarına karşılık gelen doğrunun y koordinatıdır.

void putimage(int left, int top, void *bitmap, int op);

Yukarıdaki fonksiyon, getimage ile hafızaya alınan bir görüntüyü görüntünün sol üst köşesi left(x),top(y) koordinatları olacak şekilde pencereye yerleştirilir.bitmap resmin kaydedildiği hafıza alanını gösterir. op argümanı ise ekrana pikseller yerleştirilirken ekranda mevcut olan piksellerle nasıl bir araya getirileceğini gösterir.

COPY_PUT   0koyalar
XOR_PUT1Exclusive or
OR_PUT2Inclusive or
AND_PUT3Ve
NOT_PUT4Kaynağın tersini kopyalar

Yukarıdaki işlemler piksellerin değerleri üzerine yapılır.

unsigned imagesize(int left, int top, int right, int bottom);

Yukarıdaki fonksiyon left,top,right,bottom koordinatları arasındaki alan için gereken hafıza miktarını hesaplar.

RENK NUMARALARI

BLACK0
BLUE1
GREEN2
CYAN3
RED4
MAGENTA5
BROWN6
LIGHTGRAY7
DARKGRAY8
LIGHTBLUE9
LIGHTGREEN10
LIGHTCYAN11
LIGHTRED12
LIGHTMAGENTA13
YELLOW14
WHITE15
#include<graphics.h>
void draw_redball(int x, int y) {
setcolor(4);// red
sector(x,y,0,360,40,40);
}
void draw_blueball(int x, int y) {
setcolor(1);//blue
sector(x,y,0,360,40,40);
}
void draw_greenball(int x, int y) {
setcolor(2);//green
sector(x,y,0,360,40,40);
}
int main()
{
int gdriver = DETECT, gmode;
void *redball;
void *blueball;
void *greenball;
int x, y, maxx;
unsigned int size;
initgraph(&gdriver, &gmode, "");
maxx = getmaxx();
int x_RED = getmaxx()/2;
int y_RED = getmaxy() / 2;
int x_BLUE = getmaxx()/2;
int y_BLUE = (getmaxy() / 2)-160;
int x_GREEN = getmaxx()/2;
int y_GREEN = (getmaxy() / 2)+160;
draw_blueball(x_BLUE,y_BLUE);
draw_greenball(x_GREEN,y_GREEN);
draw_redball(x_RED, y_RED);
//size = imagesize(x_RED-40, y_RED-40, x_RED+(40), y_RED+40);
size = imagesize(0, 0, 80, 80);
redball = malloc(size);
blueball=malloc(size);
greenball=malloc(size);
/* grab the image */
getimage(x_RED-40, y_RED-40, x_RED+40, y_RED+40, redball);
getimage(x_BLUE-40, y_BLUE-40, x_BLUE+40, y_BLUE+40, blueball);
getimage(x_GREEN-40, y_GREEN-40, x_GREEN+40, y_GREEN+40, greenball);
/* repeat until a key is pressed */
while (!kbhit()) {
//setcolor(9);this doesn't change color of paste
putimage(x_RED-80, y_RED-80, blueball, XOR_PUT);
putimage(x_RED, y_RED-80, redball, XOR_PUT);
putimage(x_RED-40, y_RED+20, greenball, XOR_PUT);
delay(1000);
}
free(redball);
closegraph();
return 0;
}

Pixel Fonksiyonlarının Anlatıldığı video:

void putpixel(int x, int y, int color); 

Yukarıdaki fonksiyon girilen xy ve değerlerinin kesiştiği koordinatta girilen renk değerini yazdırır. Bu renk değerleri RGB fonksiyonu ile elde edilir. RGB fonksiyonu aldığı kırmızı,mabi ve yeşil tonlarını ifade eden kodları bu renkleri belirtilen oranda karıştırılmasıyla elde edilrn renge karşılık gelen renk kodunu verir. Kırmızı ,yeşil ve mavi renklerinin her biri 8 bit ile ifade edilir. Bundan dolayı her renk 0-255 arası değer alır. RGB(KIRMIZI_TONU;YEŞİL_TONU;MAVİ_TONU) şeklinde kullanılır.

#include<graphics.h>
int main()
{
int gdriver = DETECT, gmode;
int i, x, y, maxx, maxy;
initgraph(&gdriver, &gmode, "");
maxx = getmaxx() + 1;
maxy = getmaxy() + 1;
for(x=0;x<maxx;x++)
{
for(y=0;y<maxy;y++){
putpixel(x,y,RGB(255,0,0));
}
}
while (!kbhit())
{
}
getch();
closegraph();
return 0;
}
unsigned getpixel(int x, int y);

Yukarıdaki fonksiyon bize x ve y koordinatlarının temsil ettiği pikselin renk kodunu verir.

#include<graphics.h>
void click_handler(int x, int y)
{
clearmouseclick(WM_LBUTTONDOWN) ;
cleardevice();
setfillstyle(1,RED);
bar(100,50,150,100);
setfillstyle(1,BLUE);
bar(200,50,250,100);
setfillstyle(1,GREEN);
bar(300,50,350,100);
switch(getpixel(x,y))
{
case RED:
printf("kirmizi");
setfillstyle(1,RED);
bar( getmaxx()/2-100,getmaxy()/2-100, getmaxx()/2+100,getmaxy()/2+100);
break;
case BLUE:
printf("Mavi");
setfillstyle(1,BLUE);
bar( getmaxx()/2-100,getmaxy()/2-100, getmaxx()/2+100,getmaxy()/2+100);
break;
case GREEN:
setfillstyle(1,GREEN);
bar( getmaxx()/2-100,getmaxy()/2-100, getmaxx()/2+100,getmaxy()/2+100);
printf("Yesil");
break;
default:
printf("bosluk");
break;
}
}
int main()
{
int gdriver = DETECT, gmode;
int x, y;
initgraph(&gdriver, &gmode, "");
setfillstyle(1,RED);
bar(100,50,150,100);
setfillstyle(1,BLUE);
bar(200,50,250,100);
setfillstyle(1,GREEN);
bar(300,50,350,100);
registermousehandler(WM_LBUTTONDOWN, click_handler);
while (1)
{
delay(1000);
}
getch();
closegraph();
return 0;
}

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

Bir Cevap Yazın

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: