DPI Guide 

کاربر گرامی ورود شما را به سایت خیر مقدم عرض میکنیم. جهت استفاده از تمامی امکانات سایت باید عضو شوید. جهت عضویت اینجا را کلیک کنید.



DpiGuide.com
DPI Guide
ورود / ثبت نام
پنج شنبه 7 مرداد 1389
DPIGuide.Com :: مشاهده موضوع - چگونه مي توان در محيط گرافيك زبان c يك شكل پيچيده را حركت داد؟

مشاهده موضوع بعدی
مشاهده موضوع قبلی
ارسال موضوع جدید   پاسخ دادن به این موضوع   تشکر کردن از تاپیک   Printer-friendly version
نویسنده پیام

melisa
Forum Administrator
Forum Administrator


عضو شده در: 14 شهریور 1386
پست: 1498
محل سکونت: پشت کامپیوتر blank.gif


امتیاز: 6
[وضعيت كاربر:آفلاین]

پستتاریخ: دوشنبه 23 شهریور 1388 - 13:24 پاسخگویی به این موضوع بهمراه نقل قول بازگشت به بالای صفحه

چگونه مي توان در محيط گرافيك زبان c يك شكل پيچيده را حركت داد؟

در محيط گرافيك در زبانهاي برنامه نويسي تحت DOS اشكال ساده مثل مستطيل و دايره را مي توان با پاك كردن و كشيدن مجدد براحتي جابجا نمود اما حركت اشكال پيچيده با اين روش بسيار وقت گير مي باشد بطوريكه پاك كردن و كشيدن دوباره شكل كاملا به چشم مي آيد. در چنين مواقعي مي بايست شكل مورد نظر را كه در داخل يك مستطيل فرضي قرار دارد , وارد يك حافظه كمكي نمود و محتويات اين حافظه را در نقطه اي دلخواه در صفحه چاپ كرد .

در ابتداي كار يك متغير از نوع int تعريف كنيد كه اندازه شكل محاسبه شود و در آن قرار گيرد. يك متغير نيز از نوع *void تعريف كنيد كه در واقع بافري است كه رنگ پيكسل هاي مستطيل در آن به ترتيب قرار مي گيرند تا در موقع لزوم به همان ترتيب چاپ شوند:

کد:

int size;
void* buffer;

حال مي بايست اندازه مستطيل را با تابع imagesize محاسبه و در متغير size بريزيد:
کد:
size=imagesize(x1,y1,x2,y2);


كه پارامتر هاي آن به ترتيب مختصات گوشه بالاي سمت چپ مستطيل و گوشه پايين سمت راست آن مي باشند.

حال حافظه اي را با تابع malloc به اندازه size به buffer اختصاص دهيد:

کد:
buffer=malloc(size);




الگوي اين تابع در سر فايل alloc.h قرار دارد.(الگوي ساير توابع گفته شده در graphics.h مي باشد.)

حال نوبت به خواندن پيكسلهاي مستطيل مي باشد. اين كار را با تابع getimage انجام دهيد كه پيكسلها را خوانده و در بافر قرار مي دهد:

کد:
getimage(x1,y1,x2,y2,buffer);

كار ما براي خواندن مستطيل به پايان رسيده است . فقط كافيست بافر خوانده شده را با تابع putimage در نقطه دلخواه چاپ كنيم :

کد:
putimage(x,y,buffer,COPY_PUT);

دو پارامتر اول اين تابع مختصات نقطه مقصد مي باشند .(گوشه بالاي سمت چپ مستطيل در مقصد) پارامتر دوم بافر محتوي شكل و پارامتر سوم تعيين كننده نوع چاپ شدن شكل مي باشد كه داراي حالات زير است :

کد:

Constant Value Meaning
----------------------------------------------------------------------------------------------------------
COPY_PUT 0 Copies source bitmap onto screen
XOR_PUT 1 Exclusive ORs source image with that already onscreen
OR_PUT 2 Inclusive ORs image with that already onscreen
AND_PUT 3 ANDs image with that already onscreen
NOT_PUT 4 Copy the inverse of the source


دقت كنيد كه در پايان برنامه حتما حافظه گرفته شده با دستور malloc را آزاد كنيد:

کد:
free(buffer);

توجه كنيد كه شكل لزوما يك مستطيل نيست بلكه براي ذخيره سازي شكل در حافظه يك مستطيل فرضي دور شكل در نظر گرفته مي شود . براي مثال ميتوانيد كد زير را كپي كرده و در محيط TC اجرا كنيد :

کد:

#include
#include
#include
int main(){
int driver=DETECT,mode=0,size,column,row,horiz,vert;
void* buffer;
initgraph(&driver,&mode,"c:\\tc\\bgi");
setcolor(LIGHTBLUE);
rectangle(2,2,200,40);
setfillstyle(SOLID_FILL,BLUE);
floodfill(100,20,LIGHTBLUE);
settextstyle(SMALL_FONT,HORIZ_DIR,7);
setcolor(WHITE);
outtextxy(12,10,"www.PooyeshR.com");
rectangle(0,0,600,400);
size=imagesize(1,1,201,41);
buffer=malloc(size);
getimage(1,1,201,41,buffer);
column=1;
row=1;
horiz=1;
vert=1;
while(!bioskey(1)){
putimage(column,row,buffer,COPY_PUT);
column+=vert;
row+=horiz;
if(column==399 || column==1)
vert=-vert;
if(row==359 || row==1)
horiz=-horiz;
}
free(buffer);
closegraph();
restorecrtmode();
return 0;
}


منبع:pooyeshr.com

_________________
سوده محمدآبادی
وبلاگ شخصی من در وردپرس!!
امضای آنلاین من
DpiGuide.Com
خواندن مشخصات فردی ارسال پیام شخصی ارسال email مشاهده وب سایت این کاربر شناسه عضویت در Yahoo Messenger شناسه عضویت در MSN Messenger
تشکرها از این تاپیک
Calm(سه‌شنبه 24 شهریور 1388 - 00:18), melisa از این تاپیک تشکر میکنم 
نمایش پستها:       
ارسال موضوع جدید   پاسخ دادن به این موضوع   تشکر کردن از تاپیک   Printer-friendly version

مشاهده موضوع بعدی
مشاهده موضوع قبلی
شما نمی توانید در این بخش موضوع جدید پست کنید
شما نمی توانید در این بخش به موضوعها پاسخ دهید
شما نمی توانید موضوع های خودتان را در این بخش ویرایش کنید
شما نمی توانید موضوع های خودتان را در این بخش حذف کنید
شما نمی توانید در این بخش رای دهید
شما نمیتوانید به نوشته های خود فایلی پیوست نمایید
شما نمیتوانید فایلهای پیوست این انجمن را دریافت نمایید

:: DpiGuide.Com Forums ::
تمام زمانها بر حسب GMT + 3.5 Hours می‌باشند
Forums ©
 
PHP-Nuke © 2004 Francisco Burzi
INP-Nuke

مدت زمان ایجاد صفحه : 0.15 ثانیه

:: DpiGuide.Com - Copyright All Rights Reserved By DpiGuide :: Info [at] DpiGuide.Com [dot] Com ::