تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 5 از 5

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

  1. #1
    كاربر حرفه اي Saeed_TnT's Avatar
    تاريخ عضويت
    Sep 2004
    محل سكونت
    South Park - Colorado
    پست ها
    1,278

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

    چگونه مي توان در محيط گرافيك زبان 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;
    }

  2. این کاربر از Saeed_TnT بخاطر این مطلب مفید تشکر کرده است


  3. #2
    آخر فروم باز MaSoOd's Avatar
    تاريخ عضويت
    Aug 2004
    پست ها
    2,580

    پيش فرض

    ممنون از مقالت سعید جان
    اینم لینکش :

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    توجه : این سایتی که برا آپلود انتخاب شده محدودیت پهنای
    باند و ... نداره
    حالا اگه کسی به هر دلیلی نتونست این مقاله رو دانلود کنه تو تاپیکی که " تمام مقالات انجمن آموزش رو بصورت PDF دریافت کنید بالای انجمن هست یه پست بده و اسم مقاله رو بگه تا من براش مقاله رو ایمیل بزنم انتخاب با شما بصورت word یا pdf

  4. #3
    داره خودمونی میشه omidyass's Avatar
    تاريخ عضويت
    May 2007
    محل سكونت
    همین حوالی
    پست ها
    179

    پيش فرض

    عالی بود
    Mer30

  5. #4
    داره خودمونی میشه m.nasehi's Avatar
    تاريخ عضويت
    May 2008
    محل سكونت
    every where
    پست ها
    58

    پيش فرض

    ممنونم .
    این مطلب شدیدا کمکم کرد .

  6. #5
    در آغاز فعالیت
    تاريخ عضويت
    Aug 2008
    پست ها
    2

    پيش فرض

    خیلی عالی بود . انشاا... در تمامی مراحل زندگی موفق باشی.

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •