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

 

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

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

در محیط گرافیك در زبانهای برنامه نویسی تحت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:tcbgi");
   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;
}

 

لینک کوتاه پست
مطالب مرتبط با پست جاری
  • نکات مهم
    1- لطفا نظر خود را با زبان فارسی بیان کنید
    2- رایتم نظرات اسپم و تبلیغی شما را تایید نمی کند
    3- لطفا نظرات شما بدون ابهام و واضح باشد
  • نام
    ایمیل (منتشر نمی‌شود) (لازم)
    وبسایت
    :):(;):D;)):X:?:P:*=((:O@};-:B/:):S
    نظر خصوصی
    مشخصات شما ذخیره شود ؟[حذف مشخصات] [شکلک ها]
    کد امنیتی
به کانال تلگرام سایت ما بپیوندید