PDA

View Full Version : آموزش: گرافیک در ++C



azowghi
جمعه 25 تیر 1389, 14:36 عصر
سلام
در این تاپیک کار با گرافیک winbgi رو قرار می دهم:
(http://csci.biola.edu/csci105/using_winbgi.html)

ابتدا بایست یک فایل project از نوع win32 یا در dev از نوع windows application ایجاد کنید.
سپس 3 فایل ضمیمه را دانلود کرده و به project اضافه کنید. فایل blank_graphic2.cpp را به نام project تغییر دهید. (مثلا اگر نام project شما project1 می باشد، نام فایل blank_graphic2.cpp را به project1 تغییر دهید.
حالا هر کاری که می خواهید انجام بدهید بایست در فایل فوق انجام دهید.

توضیحاتی درباره ی خطوط ابتدایی برنامه:

srand(time(NULL)); // Seed the random number generator
int GraphDriver=2,GraphMode=2;
initgraph( &GraphDriver, &GraphMode, "", 640, 480 ); // Start Window
char tempstring[80];
خطوط فوق صفحه ای در ابعاد 640 در480 ایجاد میکنند. البته دستور زیر برای تعریف یک بافر برای انجام کارهای پرینت و اسکن می باشد.

char tempstring[80];

برای پرینت کردن از دستور زیر استفاده کنید:

sprintf(tempstring,"%d",c);
outtextxy(270,315,tempstring);
دستور فوق متغیر c را در بافر tempsrting قرار می دهد و سپس با تابع outtextxy آن را چاپ می کند. (در مثال بنده c یک عدد می باشد.)

توابع زیر در دسترس شماست:


//---------setcolor( color )
// Colors:
// BLACK, BLUE, GREEN, CYAN, RED, MAGENT, BROWN, LIGHTGRAY, DARKGRAY,
// LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE

setcolor(WHITE);

//---------line( x1, y1, x2, y2);
line(20, 20, 100, 80);

setcolor(BLUE);
//---------rectangle( x1, y1, x2, y2);
rectangle(20, 100, 150, 150);

//---------setfillstyle( fill_style, color)
// Fill_styles:
// EMPTY_FILL, SOLID_FILL, LINE_FILL, LTSLASH_FILL, SLASH_FILL, BKSLASH_FILL,
// LTBKSLASH_FILL, HATCH_FILL, XHATCH_FILL, INTERLEAVE_FILL, WIDE_DOT_FILL,
// CLOSE_DOT_FILL, USER_FILL

setcolor(RED);
setfillstyle(SOLID_FILL, RED);

//---------bar( x1, y1, x2, y2);
bar(20, 200, 150, 220);

setfillstyle(SOLID_FILL, GREEN);
bar(20, 230, 150, 250);

setfillstyle(BKSLASH_FILL, LIGHTGREEN);
bar(160, 200, 190, 250);

//---------circle( X, Y, radius)
setcolor(WHITE);
circle( 50, 310, 40);

//---------putpixel (X, Y, color)
putpixel(50, 310, RED);
putpixel(60, 320, WHITE);

//---------arc( X, Y, start_angle, end_angle, radius);
// Angles in degrees 0-360.
// 0-right. Counter-clockwise (90-up, 180-left, 270-down)
arc( 140, 310, 0, 90, 40);
arc( 140, 310, 120, 160, 40);

//---------ellipse(x, y, start_angle, end_angle, x_radius, y_radius)
ellipse(60, 400, 0, 270, 50, 30);

//---------fillellipse(x, y, x_radius, y_radius);
setcolor(YELLOW);
setfillstyle(SOLID_FILL, YELLOW);
fillellipse(170, 400, 50, 30);

setcolor(WHITE);
setfillstyle(HATCH_FILL, RED);
fillellipse(250, 400, 30, 50);


//---------pieslice( x, y, start_angle, end_angle, radius)
setcolor(RED);
setfillstyle(SOLID_FILL, RED);
pieslice(350, 60, 0, 90, 40);

setcolor(WHITE);
setfillstyle(SOLID_FILL, BLUE);
pieslice(350, 60, 90,180, 40);

setcolor(GREEN);
setfillstyle(WIDE_DOT_FILL, WHITE);
pieslice(350, 65, 180, 270, 60);

setcolor(WHITE);
//---------setlinestyle(style, pattern, thickness);
// line styles:
// SOLID_LINE, DOTTED_LINE, CENTER_LINE, DASHED_LINE, USERBIT_LINE
// -- Normal: (SOLID_LINE, 0, 1);
setlinestyle(DOTTED_LINE, 0, 1);
line(300, 130, 500, 130);

setlinestyle(SOLID_LINE, 0, 3);
line(300, 150, 500, 150);

setlinestyle(DASHED_LINE, 0, 1);
rectangle(300, 170, 500, 200);

setlinestyle(SOLID_LINE, 0, 1); //Back to normal
line(300, 220, 500, 220);

//---------settextjustify( horizontal, vertical )
// horizontal = LEFT_TEXT, CENTER_TEXT, or RIGHT_TEXT
// vertical = BOTTOM_TEXT, TOP_TEXT
// -- Normal is (LEFT_TEXT, TOP_TEXT)

settextjustify(LEFT_TEXT,TOP_TEXT);

//---------settextstyle(font,direction,size)
// font = DEFAULT_FONT, TRIPLEX_FONT, SMALL_FONT, SANSSERIF_FONT, GOTHIC_FONT
// or try numbers 0 thru 15?
// direction = HORIZ_DIR, VERT_DIR

setcolor(YELLOW);
settextstyle(TRIPLEX_FONT, HORIZ_DIR, 2);

//---------outtextxy( x, y, "text")
outtextxy(300, 260, "Triplex, size 2");

setcolor(WHITE);

settextstyle(GOTHIC_FONT, VERT_DIR, 2);
outtextxy(600, 20, "Gothic, Vertical, Size 2");

setcolor(GREEN);
settextstyle(DEFAULT_FONT, HORIZ_DIR, 2);
outtextxy(300, 455, "Press any key...");

//---------getch()
getch(); //Wait for a key. (When main function ends, the window will close)

} // end of main()

این هم نتایج کدهای فوق:

http://csci.biola.edu/csci105/graphics_screen_shot.gif


امیدوارم کافی بوده باشد

vb8334
جمعه 25 تیر 1389, 15:01 عصر
با سلام به شما و کلیه دوستان برنامه نویس

دوست عزیز من میتونم در turbo c++ با گرافیک کار کنم

ممنون

azowghi
جمعه 25 تیر 1389, 18:50 عصر
سلام
بله منتها هدر graphics در توربو سی، 16 بیتی است و با ویندوز جوابگو نیست.
بهتر است از روش فوق استفاده کنید.

به لینک زیر هم یک سر بزنید:
برنامه نویسی گرافیک در C و ++C (http://www.barnamenevis.org/forum/showthread.php?t=103584) ‏