در اين بخش مي‌توانيد در مباحث مربوط به زبانهاي بر پايه C به بحث بپردازيد
Captain I

Captain I



نماد کاربر
پست ها

204

تشکر کرده: 11 مرتبه
تشکر شده: 46 مرتبه
تاريخ عضويت

يکشنبه 31 مرداد 1389 12:47

آرشيو سپاس: 1541 مرتبه در 194 پست

Re: آموزش گرافیک با استفاده از کتابخانه Graphics.h در زبان +

توسط MISSILE » چهارشنبه 8 شهریور 1391 15:52

بسم الله الرحمن الرحیم

با عرض سلام خدمت شما دوستان

از وقفه ی طولانی که بین آموزش ها افتاد عذر خواهی میکنم.

با بخش نهم از آموزش گرافیک کامپیوتری در زبان برنامه نویسی ++C در خدمتتون هستم. در این بخش نحوه دستکاری کانال های رنگ RGB تصویر را خواهیم گفت و همچنین تابع ()setlinestyle را شرح خواهیم داد.

قبل از انجام هر کاری باید فایل پروژه را در کامپایلر مورد نظر باز کنیم (برای اطلاعات بیشتر به قسمت های قبل رجوع شود).

شرح تابع ()setlinestyle :



کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


توضیحات دستور مشخص شده با عدد یک (تابع ()setlinestyle) در کدهای بالا :

از تابع ()setlinestyle جهت تعیین سبک خط استفاده میشود.

شرح پارامتر های ورودی تابع ()setlinestyle :

الگوی تابع : ( void setlinestyle(int linestyle ,unsigned upattern ,int thickness


linestyle : این پارامتر نوع الگوی خط را مشخص میکند و میتواند مقادیر ثابت زیر را بپذیرد. از نوع صحیح (int)

SOLID_LINE : این ثابت باعث میشود خط به صورت کامل نمایش داده شود (معادل عددی 0)

DOTTED_LINE : این ثابت باعث میشود خط بصورت نقطه چین (کاملا نقطه نیست) نمایش داده شود (معادل عددی 1)

CENTER_LINE : این ثابت باعث میشود خط بصورت هم زمان خط چین و نقطه چین نمایش داده شود (معادل عددی 2)

DASHED_LINE : این ثابت باعث میشود خط بصورت خط چین نمایش داده شود (معادل عددی 3)

USERBIT_LINE
: زمانی که از این ثابت استفاده کنید میتوانید با مقداردهی پارامتر بعدی همین تابع یک الگوی ساده بجز چهار الگوی قبلی برای خط تعریف کنید (معادل عددی 4)

upattern : این پارامتر زمانی قابل استفاده است که شما پارامتر اولی همین تابع را برابر با مقدار USERBIT_LINE قرار دهید و آنگاه این پارامتر را با مقادیر مختلف عددی مقدار دهی کنید تا یک الگو تازه تولید شود (unsigned)

thickness : این پارامتر ضخامت خط را مشخص میکند و دو ثابت زیر را میپذیرد. از نوع صحیح (int)

NORM_WIDTH : این ثابت ضخامت خط را 1 پیکسل قرار میدهد (معادل عددی 1)

THICK_WIDTH : این ثابت ضخامت خط را 3 پیکسل قرار میدهد (معادل عددی 3)


و همان طور که در دستورات میبینید بعد از مقداردهی تابع ()setlinestyle، تابع ()line را جهت رسم خط مورد نظر فراخوانی کرده ایم.

نتیجه اجرای دستورات بالا :






خب بریم سراغ کار با کانال های رنگ RGB

به دستورات زیر خوب دقت کنید :



کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 

توضیحاتی کوتاه درباره کانال های رنگ RGB :

کانال ها تصاویر خاکستری هستند که انواع مختلفی از اطلاعات را ذخیره می کنند . کانال های اطلاعات رنگ در هنگام بازکردن یک تصویر جدید بصورت اتوماتیک ایجاد می شوند. مُد رنگ تصویر تعیین کننده تعداد کانال های ایجاد شده می باشد. برای مثال یک تصویر در مُد RGB بصورت پیش فرض دارای چهار کانال است، به صورت کانال های قرمز، سبز و آبی و بعلاوه یک کانال ترکیبی که برای ویرایش تصویر بکار می رود.

دستور 1 تابع ()Channel را فراخوانی میکند. (توجه بقیه دستورات در مراحل قبلی گفته شده است)

شرح پارامتر های ورودی تابع ()Channel :

الگوی تابع : ( void Channel(int State = 1 ,int A = 1 ,int B = 1 ,int C = 1

State : این پارامتر دو مقدار 1 و 2 را می پذیرد، در حالت شماره 1 شما میتوانید با مقداردهی سه پارامتر بعدی همین تابع کانال های رنگ تصویر را جابجا یا یکنواخت کنید. در حالت شماره 2 شما میتوانید مقداردهی سه پارامتر بعدی همین تابع کانال های رنگ RGB را خاموش یا روشن کنید. از نوع صحیح (int).

A : اگر پارامتر ورودی State را برابر با مقدار 1 قرار دهید این پارمتر میتواند مقادیری بین 0 تا 2 را بپذیرد ولی اگر پارامتر ورودی State را برابر با مقدار 2 قرار دهید این پارامتر میتواند مقادیر 0 یا 1 را بپذیرد که عدد 0 بیانگر خاموش بودن کانال رنگ است و عدد 1 بیانگر روشن بودن کانال رنگ است. از نوع صحیح (int).

B : اگر پارامتر ورودی State را برابر با مقدار 1 قرار دهید این پارمتر میتواند مقادیری بین 0 تا 2 را بپذیرد ولی اگر پارامتر ورودی State را برابر با مقدار 2 قرار دهید این پارامتر میتواند مقادیر 0 یا 1 را بپذیرد که عدد 0 بیانگر خاموش بودن کانال رنگ است و عدد 1 بیانگر روشن بودن کانال رنگ است. از نوع صحیح (int).

C : اگر پارامتر ورودی State را برابر با مقدار 1 قرار دهید این پارمتر میتواند مقادیری بین 0 تا 2 را بپذیرد ولی اگر پارامتر ورودی State را برابر با مقدار 2 قرار دهید این پارامتر میتواند مقادیر 0 یا 1 را بپذیرد که عدد 0 بیانگر خاموش بودن کانال رنگ است و عدد 1 بیانگر روشن بودن کانال رنگ است. از نوع صحیح (int).

سعی کنید دستورات نوشته شده در تابع ()Channel را بررسی کنید. توجه : تمامی پارامتر های ورودی این تابع دارای مقدار پیش فرض (Default value) یک است.

نتیجه اجرای دستورات بالا : (توجه : شما میتوانید تصویر جدید و ویرایش شده را توسط تابع ()writeimagefile که قبلا شرح داده شد ذخیره کنید در ضمن تصویر استفاده شده در این آموزش را میتوانید از  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد  دریافت کنید، فایل پروژه ی این آموزش را نیز میتوانید از  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد  دریافت کنید با پسوند ZIP).




نتیجه اجرای تابع در حالت ( 0, 1, 2, 1)Channel :




نتیجه اجرای تابع در حالت ( 1, 2, 0, 1)Channel :




نتیجه اجرای تابع در حالت ( 1, 0, 0, 2)Channel : (تنها کانال آبی تصویر فعال است)




نتیجه اجرای تابع در حالت ( 0, 1, 1, 2)Channel : (کانال آبی تصویر غیر فعال است)




و به همین ترتیب میتوانید حالت های مختلفی ایجاد کنید.



خب این بخش نیز به پایان رسید. امیدوارم از این آموزش لذت برده باشید. من عاشق کار روی تصاویرم و مطمئنم شما هم از این کار بدتان نمی یاید (برای پردازش تخصصی و حرفه ای تصاویر دیجیتال، یادگیری نرم افزار Matrix laboratory) MATLAB) توصیه میشود).

موفق و پیروز باشید دوستان

توجه : هر گونه کپی برداری از این تاپیک و مطالب آموزشی آن تنها با درج نام سایت www.centralclubs.com به عنوان منبع مجاز است. با تشکر فراوان از شما.

php7 از این پست سپاسگزاري کرده است

کاربران زیر از شما کاربر محترم جناب MISSILE تشکر کرده اند:
Z.R., behrad90, TDCC, MASTER, Mahdi1944, Solver, ARafiee, oweiys, demorgan, nima-rad, ali-j, FARSHAD.ADL

Captain I

Captain I



نماد کاربر
پست ها

204

تشکر کرده: 11 مرتبه
تشکر شده: 46 مرتبه
تاريخ عضويت

يکشنبه 31 مرداد 1389 12:47

آرشيو سپاس: 1541 مرتبه در 194 پست

Re: آموزش گرافیک با استفاده از کتابخانه Graphics.h در زبان +

توسط MISSILE » چهارشنبه 8 شهریور 1391 23:08

بسم الله الرحمن الرحیم

با عرض سلام خدمت شما دوستان

با بخش دهم از آموزش گرافیک کامپیوتری در زبان برنامه نویسی ++C در خدمتتون هستم. در این بخش رنگ های تصویر را توسط تابع ()Invert معکوس میکنیم.

فایل پروژه مورد نظر را باز کنید و دستورات زیر را در آن قرار دهید (برای اطلاعات بیشتر در این مورد به قسمت های قبلی رجوع شود).

دستورات همراه با توضیحات :



کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 



دستور 1 تابع ()Invert را فراخوانی میکند. (توجه بقیه دستورات در مراحل قبلی توضیح داده شده است)

شرح تابع ()Invert :

الگوی تابع : ()void Invert

اگر خوب در دستورات این تابع دقت کنید بعد از تابع ()COLOR علامت ~ (نقیض یک عملگر بیتی است و فقط روی یک عملوند عمل میکند. مثال : عدد 12 در مبنای 2 عدد 1100 میشود اگر عملگر نقیض را روی این عدد اجرا کنیم حاصل عدد 0011 میشود که در نهایت دو صفر پشت یک ها حساب نشده و عدد 11 در مبنای 2 و عدد 3 در مبنای 10 میشود. کار این عملگر معکوس کردن اعداد باینری است 0 -> 1 و 1 -> 0) آمده است این علامت باعث میشود مقدار برگشتی تابع ()COLOR که از نوع صحیح (int) است معکوس شده و تصویر حاصل نیز با رنگ های معکوس و متفاوت رسم شود.

نتیجه اجرای دستورات بالا : (توجه : شما میتوانید تصویر جدید و ویرایش شده را توسط تابع ()writeimagefile که قبلا شرح داده شد ذخیره کنید و در ضمن تصویر استفاده شده در این آموزش را میتوانید از  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد  دریافت کنید)





خب این بخش نیز به پایان رسید. امیدوارم از این آموزش لذت برده باشید. تمام این تنظیمات و Filter ها در نرم افزار Photoshop قابل انجام است، البته روش ها و الگوریتم های نوشته شده برای این ابزار ها در این نرم افزار کاملا متفاوت و سریع تر همراه با منطق کامل ریاضیات و اصول مهندسی نرم افزار است.

موفق و پیروز باشید دوستان

توجه : هر گونه کپی برداری از این تاپیک و مطالب آموزشی آن تنها با درج نام سایت www.centralclubs.com به عنوان منبع مجاز است. با تشکر فراوان از شما.

php7 از این پست سپاسگزاري کرده است

کاربران زیر از شما کاربر محترم جناب MISSILE تشکر کرده اند:
nima-rad, ali-j, FARSHAD.ADL, Z.R., behrad90, TDCC, MASTER, Mahdi1944, ARafiee, oweiys, demorgan

Captain I

Captain I



نماد کاربر
پست ها

204

تشکر کرده: 11 مرتبه
تشکر شده: 46 مرتبه
تاريخ عضويت

يکشنبه 31 مرداد 1389 12:47

آرشيو سپاس: 1541 مرتبه در 194 پست

Re: آموزش گرافیک با استفاده از کتابخانه Graphics.h در زبان +

توسط MISSILE » جمعه 5 آبان 1391 00:16

بسم الله الرحمن الرحیم

با بخش یازدهم از آموزش گرافیک کامپیوتری در زبان برنامه نویسی ++C در خدمتتون هستم. در این بخش جلوه ای تحت عنوان Wave را مورد بررسی قرار میدهیم.

فایل پروژه مورد نظر را باز کنید و دستورات زیر را در آن قرار دهید (برای اطلاعات بیشتر در این مورد به قسمت های قبلی رجوع شود).

دستورات همراه با توضیحات :



کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


دستور 1 تابع ()Wave را فراخوانی میکند. (توجه بقیه دستورات در مراحل قبلی توضیح داده شده است)

شرح تابع ()Wave :

الگوی تابع : ( void Wave(float Width ,float Depth


Width : پهنای موج ها توسط این پارامتر تعیین میشود. از نوع اعشاری (float).

Depth : عمق و شدت موج ها توسط این پارامتر تعیین میشود. از نوع اعشاری (float).


روش کار تابع ()Wave :

نحوه ی کار این تابع به این صورت است که رنگ های سه گانه RGB موجود در آرایه Pixels را توسط دو حلقه For تودرتو و یک فرمول ساده ریاضی (در این فرمول از تابع Sin برای محاسبات استفاده شده است. برای دسترسی به این تابع و دیگر توابع پرکاربرد ریاضی شما باید در بالای تابع اصلی [int main] برنامه فایل سرآیند math.h را با دستور include# به برنامه تان ضمیمه کنید) بشکل موج های سینوسی متوالی در ردیف های زیر هم قرار میدهد و تصویر نهایی را ایجاد میکند.

نتیجه کامپایل دستورات بالا : (توجه : شما میتوانید تصویر جدید و ویرایش شده را توسط تابع ()writeimagefile که قبلا شرح داده شد ذخیره کنید و در ضمن تصویر استفاده شده در این آموزش را میتوانید از  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد  دریافت کنید و نیز فایل و کدهای این برنامه در  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد )





خب دوستان این قسمت هم به پایان رسید امیدوارم از این آموزش لذت برده باشید. در آینده نه چندان دور با آموزش های تازه و جدیدی خواهم برگشت، این نکته را یادتون نره که C یک زبان برنامه نویسی قدرتمند است.

موفق و پیروز باشید دوستان

توجه : هر گونه کپی برداری از این تاپیک و مطالب آموزشی آن تنها با درج نام سایت www.centralclubs.com به عنوان منبع مجاز است. با تشکر فراوان از شما.

php7 از این پست سپاسگزاري کرده است

کاربران زیر از شما کاربر محترم جناب MISSILE تشکر کرده اند:
demorgan, MASTER, ali-j, Mahdi1944, Z.R., nima-rad, TDCC, ARafiee, behrad90, Hajj saber

New Member



no avatar
پست ها

1

تشکر کرده: 0 مرتبه
تشکر شده: 0 مرتبه
تاريخ عضويت

پنج شنبه 9 آذر 1391 14:25

آرشيو سپاس: 5 مرتبه در 1 پست

Re: آموزش گرافیک با استفاده از کتابخانه Graphics.h در زبان +

توسط kamal45 » پنج شنبه 9 آذر 1391 14:49

[quote="MISSILE"]خب برای شروع نیاز به یک کامپایلر خوب و تحت ویندوز داریم پس برای این کار از کامپایلر "++Dev-C" استفاده میکنیم شما میتوانید ورژن 4.9.9.2 این کامپایلر را از  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد  دانلود کنید.

بعد از اینکه دانلود کامپایلر تمام شد نصبش کنید بعد از نصب اجراش کنید. (کامپایلر "++Dev-C" خیلی خوب و قدرتمنده من شخصا تمام برنامه های زبان C و ++C را در این برنامه پیاده سازی میکنم)




******************************************************
سلام از زحمت هایی که برای این تاپیک کشیدین متشکرم. من باید یک بازی گرافیکی دوز بسازم. با استادم حرف زدم گفت که نباید از وین 32 استفاده کنی . وقتی من تو بورلند سی برنامه ی گرافیکی می نویسم از بی جی آی ایراد میگیره که پیداش نمیکنه خیلی تو اینترنت گشتم حلش کنم ولی نتونستم بخدا کلافه شدم لطفا کمکم کنید.
راستی کامپایلری رو که شما معرفی کردین رو دانلود کردم ولی کار کردن باهاش واسم سخته و محیط عجیبی داره. متشکر از شما

کاربران زیر از شما کاربر محترم جناب kamal45 تشکر کرده اند:
TDCC, Hajj saber, MISSILE, demorgan, Z.R.

New Member



no avatar
پست ها

4

تشکر کرده: 0 مرتبه
تشکر شده: 1 مرتبه
تاريخ عضويت

چهارشنبه 4 بهمن 1391 18:40

آرشيو سپاس: 4 مرتبه در 4 پست

Re: آموزش گرافیک با استفاده از کتابخانه Graphics.h در زبان +

توسط Hajj saber » چهارشنبه 4 بهمن 1391 18:45

اگه بشه بگین مختصات مکان کلیک شده رو چطوری میشه فهمید خیلی ممنون میشم

php7 از این پست سپاسگزاري کرده است

کاربران زیر از شما کاربر محترم جناب Hajj saber تشکر کرده اند:
MISSILE

Captain I

Captain I



نماد کاربر
پست ها

204

تشکر کرده: 11 مرتبه
تشکر شده: 46 مرتبه
تاريخ عضويت

يکشنبه 31 مرداد 1389 12:47

آرشيو سپاس: 1541 مرتبه در 194 پست

Re: آموزش گرافیک با استفاده از کتابخانه Graphics.h در زبان +

توسط MISSILE » چهارشنبه 4 بهمن 1391 19:23

بسم الله الرحمن الرحیم

با بخش دوازدهم از آموزش گرافیک کامپیوتری در زبان برنامه نویسی ++C در خدمتتون هستم. در این بخش از آموزش ها رویدادهای برنامه نویسی را مورد بررسی قرار میدهیم.

رویداد (Event) : اگر بخواهم تعریف کامل و کوچکی برای رویدادها بیان کنم میشود گفت رویدادها در دنیای برنامه نویسی رویداد محور (Event-driven programming) راه و روشی برای تعامل انسان با سیستم هستند که این سیستم میتواند نرم افزاری یا سخت افزاری باشد. این راه و روش میتواند از طریق دستگاه های ورودی و خروجی که به سیستم متصل میشوند ایجاد شود مانند اتصال دستگاه های معمول چون ماوس و صفحه کلید و... که کاربر از طریق این دستگاه ها به راحتی با سیستم ارتباط برقرار میکند و یکسری عملیات و فرآیند را به سرانجام میرساند و نتیجه را بررسی میکند.

نکته : ما در اینجا دو نوع رویداد را بررسی میکنیم که شامل رویدادهای ماوس و صفحه کلید میشوند، هر دو بصورت جداگانه بررسی میشوند.

رویدادهای صفحه کلید :

در صفحه کلید هر یک از کلید های روی بورد دارای یک کد منحصر به فرد هستند که از سیستم کد گذاری استاندارد اَسکی استفاده میکنند (معروف به کد اَسکی [ASCII Code])، میتوان در زبان C توسط توابع ای این کد را دریافت کرد و در قبال آن فرآیندی را انجام داد مثلا هنگام فشردن کلید Enter یک خط در پنجره گرافیکی رسم شود و یا موقعیت پنجره گرافیکی در صفحه نمایش جابجا شود و... .

شما میتوانید در جدول زیر کدهای اَسکی مهم ترین کارکترها و کلید های صفحه کلید را مشاهد کنید (ما در این آموزش از کدهای ستون مبنای ده (Dec) استفاده میکنیم) :

  

توجه : حروف کوچک و بزرگ بر روی صفحه کلید کد اَسکی جداگانه ای دارند.


برای بررسی وضعیت کلید فشرده شده بر روی صفحه کلید میتوانیم از تابع ()gatch استفاده کنیم (برای استفاده از این تابع در برنامه باید در بالای تابع ()main برنامه فایل سرآیند conio.h را include کنیم)، روش کار این تابع به این شکل است که کد مبنای ده کلید فشرده شده را بصورت یک عدد از نوع int برمیگرداند. به قطعه کد زیر توجه کنید :

کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


در برنامه ی بالا متغیری بنام Code از نوع int تعریف شده است و توسط دستور انتساب (علامت مساوی) این متغیر با مقدار بازگشتی تابع ()gatch که از نوع int میباشد مقداردهی میشود و در آخر توسط دستور cout این مقدار که همان کد مربوط به کلید فشرده شده از صفحه کلید است در پنجره ی کنسول چاپ میشود.

نتیجه ی حاصل از اجرای برنامه ی بالا و بعد فشردن کلید Enter :

  

همان طور که میبینید بعد از فشردن کلید Enter از روی صفحه کلید کد اَسکی این کلید در حالت مبنای ده (Decimal) در کنسول چاپ میشود (شما میتوانید با این قطعه برنامه کدهای کلیدهای دیگر صفحه کلید را بدست بیاورید).

مثالی دیگر :

در برنامه زیر کد کلید فشرده شده از صفحه کلید توسط تابع ()gatch بدست آمده و در متغیر Code ریخته میشود و بعد با یک دستور شرطی بررسی میکنیم اگر کد بدست آمده برابر با کد مورد نظر ما بود (کد 100 برابر با کلید کارکتر d در حالت کوچک بر روی صفحه کلید است، به جدول بالا توجه کنید) بعد توسط تابع ()Line یک خط در مختصات تعریف شده رسم میکنیم.

کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


نتیجه ی حاصل از اجرای برنامه ی بالا و بعد از فشردن کلید d :





در قسمت بعد رویدادهای ماوس را بررسی میکنیم. امیدوارم این آموزش برای شما عزیزان مفید واقع شده باشد.


موفق و پیروز باشید دوستان

توجه : هر گونه کپی برداری از این تاپیک و مطالب آموزشی آن تنها با درج نام سایت centralclubs.com به عنوان منبع مجاز است. با تشکر فراوان از شما.

php7 از این پست سپاسگزاري کرده است

کاربران زیر از شما کاربر محترم جناب MISSILE تشکر کرده اند:
ARafiee, ali-j, TDCC, sijoval, Hajj saber, Mahdi1944, behrad90

New Member



no avatar
پست ها

1

تشکر کرده: 0 مرتبه
تشکر شده: 1 مرتبه
تاريخ عضويت

دوشنبه 2 بهمن 1391 15:27

آرشيو سپاس: 1 مرتبه در 1 پست

Re: آموزش گرافیک با استفاده از کتابخانه Graphics.h در زبان +

توسط shaffaf » پنج شنبه 5 بهمن 1391 11:48

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

php7 از این پست سپاسگزاري کرده است

کاربران زیر از شما کاربر محترم جناب shaffaf تشکر کرده اند:
MISSILE

Captain I

Captain I



نماد کاربر
پست ها

204

تشکر کرده: 11 مرتبه
تشکر شده: 46 مرتبه
تاريخ عضويت

يکشنبه 31 مرداد 1389 12:47

آرشيو سپاس: 1541 مرتبه در 194 پست

Re: آموزش گرافیک با استفاده از کتابخانه Graphics.h در زبان +

توسط MISSILE » پنج شنبه 5 بهمن 1391 19:56

بسم الله الرحمن الرحیم

با بخش سیزدهم از آموزش گرافیک کامپیوتری در زبان برنامه نویسی ++C در خدمتتون هستم. در این بخش رویدادهای ماوس را بررسی میکنیم.


رویدادهای ماوس :

ماوس ها ممکن است دارای چندین کلید متفاوت بر روی خود باشند ولی در اکثر ماوس ها دو کلید چپ (Left button) ، راست (Right button) و موقعیت اشاره گر (Cursor) ماوس در صفحه نمایش که معمولا توسط یک نور لیزر تعیین میشود وجود دارد که هر یک میتوانند رویدادی را تولید کنند. ما میتوانیم در برنامه توسط توابع ای این رویدادهای ماوس را کنترل کنیم و متناسب با آن ها دستوراتی را انجام دهیم.


ما در اینجا سه تابع اصلی برای انجام این کار داریم که عبارت است از :



(bool ismouseclick(int kind

شرح تابع :

این تابع متناسب با پارامتر ورودی که دریافت میکند یک مقدار درست (true) را برمیگرداند در غیر اینصورت یک مقدار نادرست (false) را برمیگرداند.

پارامتر kind که از نوع صحیح (int) میباشد نوع رویدادی که کاربر ایجاد میکند را مشخص میکند که میتواند مقادیر ثابت زیر را بپذیرد :

WM_MOUSEMOVE : اگر ماوس جابجا شود تابع مقدار true برمیگرداند.

WM_LBUTTONDBLCLK : اگر کلید چپ ماوس دوبار پشت سر هم سریع کلیک شود تابع مقدار true برمیگرداند.

WM_LBUTTONDOWN : اگر کلید چپ ماوس پایین نگه داشته شود تابع مقدار true برمیگرداند.

WM_LBUTTONUP : اگر کلید چپ ماوس فشرده شود و سپس رها شود تابع مقدار true برمیگرداند.

WM_RBUTTONDBLCLK : اگر کلید راست ماوس دوبار پشت سر هم سریع کلیک شود تابع مقدار true برمیگرداند.

WM_RBUTTONDOWN : اگر کلید راست ماوس پایین نگه داشته شود تابع مقدار true برمیگرداند.

WM_RBUTTONUP : اگر کلید راست ماوس فشرده شود و سپس رها شود تابع مقدار true برمیگرداند.

و...



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

شرح تابع :

این تابع متناسب با پارامتر اولی خود موقعیت اشاره گر ماوس را بر میگرداند و در دو پارامتر بعدی خود قرار میدهد. برای این منظور باید دو پارامتر بعدی را با دو متغیر از نوع صحیح (int) مقداردی کنیم.

پارامتر kind که از نوع صحیح (int) میباشد نوع رویدادی که کاربر ایجاد خواهد کرد را درخواست میکند که میتواند مقادیر ثابت زیر باشد :

WM_MOUSEMOVE : ماوس جابجا شده است.

WM_LBUTTONDBLCLK : کلید چپ ماوس دوبار پشت سر هم سریع کلیک شده است.

WM_LBUTTONDOWN : کلید چپ ماوس پایین نگه داشته شده است.

WM_LBUTTONUP : کلید چپ ماوس فشرده شده و سپس رها شده است.

WM_RBUTTONDBLCLK : کلید راست ماوس دوبار پشت سر هم سریع کلیک شده است.

WM_RBUTTONDOWN : کلید راست ماوس پایین نگه داشته شده است.

WM_RBUTTONUP : کلید راست ماوس فشرده شده و سپس رها شده است.

و...



(void delay(int millisec

شرح تابع :

این تابع محاسبات اضافی مربوط به رویدادهای ماوس را در پردازنده متوقف میکند، سرعت انجام این واکنش توسط پارامتر millisec بر حسب میلی ثانیه که از نوع صحیح (int) است مشخص میشود.



حال میخواهیم با این توابع برنامه ای بنویسیم که هر وقت کاربر در یک ناحیه ی مشخص از پنجره گرافیکی کلیک چپ ماوس را فشرد و رها کرد یک دایره در پنجره گرافیکی رسم شود، به قطعه کد زیر توجه کنید :

کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


شرح برنامه بالا :

دستور 1 : یک مستطیل در مختصات تعیین شده رسم میکند.

دستور 2 : یک متن برای راهنمایی کاربر در مرکز مستطیل رسم شده قرار میدهد.

دستور 3 : یک حلقه دائم ایجاد میکند.

دستور 4 : یک دستور شرطی است که وضعیت رویداد کلید چپ ماوس را در حالت فشردن و رها کردن توسط تابع ()ismouseclick بررسی میکند اگر مقدار تابع مورد نظر true باشد دستورات ادامه میابند.

دستور 5 : یک حلقه است که نسبت به مقدار برگشتی تابع درون خود در حالت معکوس (به علامت ! توجه شود) شروع به اجرای تابع ()delay میکند تا جلوی محاسبات اضافی در پردازنده را بگیرد، پارامتر ورودی تابع ()delay را با مقدار عددی 1 میلی ثانیه مقداردهی کنید.

دستور 6 : موقعیت اشاره گر ماوس در مختصات کلیک شده را در دو متغیر از پیش تعریف شده ی از نوع صحیح (int) قرار میدهد.

دستور 7 : یک دستور شرطی است که مقادیر دو متغیر x و y را مورد بررسی قرار میدهد اگر این مقادیر در محدوده ی مستطیلی که قبلا رسم کردیم بودند دستورات مورد نظر را اجرا میکند.

دستور 8 : رنگ رسم شکل در حالت زرد رنگ قرار میگیرد.

دستور 9 : یک دایره در مختصات تعیین شده با شعاع 30 پیکسل رسم میکند.

دستور 10 : فرآیند حلقه ی خارجی (دائم) را پایان میدهد.

نتیجه ی حاصل از اجرای برنامه ی بالا و بعد از بردن اشاره گر ماوس به ناحیه ی Draw و سپس کلیک کردن در آن ناحیه :




توجه اگر در دو تابع ()ismouseclick و ()getmouseclick از ثابت WM_MOUSEMOVE استفاده کنید میتوانید در هر لحظه موقعیت اشارگر ماوس را در دو متغیر x و y داشته باشید.



مبحث رویدادها به پایان رسید امیدوارم این آموزش برای شما عزیزان مفید واقع شده باشد. در قسمت بعد در رابطه با پویانمایی دو بعدی ساده (Animation) بحث خواهیم کرد.


موفق و پیروز باشید دوستان

توجه : هر گونه کپی برداری از این تاپیک و مطالب آموزشی آن تنها با درج نام سایت centralclubs.com به عنوان منبع مجاز است. با تشکر فراوان از شما.

php7 از این پست سپاسگزاري کرده است

کاربران زیر از شما کاربر محترم جناب MISSILE تشکر کرده اند:
TDCC, behrad90, ARafiee, Mohammad.Jafar, demorgan, ali-j, Z.R., Mahdi1944

New Member



no avatar
پست ها

4

تشکر کرده: 0 مرتبه
تشکر شده: 1 مرتبه
تاريخ عضويت

چهارشنبه 4 بهمن 1391 18:40

آرشيو سپاس: 4 مرتبه در 4 پست

Re: آموزش گرافیک با استفاده از کتابخانه Graphics.h در زبان +

توسط Hajj saber » پنج شنبه 5 بهمن 1391 22:27

ببخشید شما گفتید  برای کشیدن مسطتیل تو پر از dos box استفاده کنیم میشه بیشتر توضیح بدین که dos box چیه چه دستوری داره و.....

کاربران زیر از شما کاربر محترم جناب Hajj saber تشکر کرده اند:
Z.R.

Captain I

Captain I



نماد کاربر
پست ها

204

تشکر کرده: 11 مرتبه
تشکر شده: 46 مرتبه
تاريخ عضويت

يکشنبه 31 مرداد 1389 12:47

آرشيو سپاس: 1541 مرتبه در 194 پست

Re: آموزش گرافیک با استفاده از کتابخانه Graphics.h در زبان +

توسط MISSILE » جمعه 6 بهمن 1391 14:41

ببخشید شما گفتید  برای کشیدن مستطیل تو پر از dos box استفاده کنیم میشه بیشتر توضیح بدین که dos box چیه چه دستوری داره و.....


با عرض سلام خدمت شما دوست گرامی

برنامه ی زیر همان برنامه مربوط به رویداد ماوس است فقط بنده یک تابع برای پر کردن مساحت مستطیل به اسم Filler نوشتم و به کد برنامه اضافه کردم کافی است این تابع را به کد برنامه تان اضافه کنید و بعد از تابع رسم مستطیل (به دستور 1 توجه کنید) این تابع را فراخوانی کنید و مختصات مستطیل مورد نظرتان را که در دستور قبل رسم کردید به آن بدهید. همچنین توسط پارامتر ورودی Color تابع Filler، رنگ مورد نظر جهت پر کردن مساحت مستطیل را تعیین کنید. در ضمن تابع setcolor که بعد از تابع Filler فراخوانی شده رنگ نوشته را مشخص میکند.

در مورد DOS Box باید عرض کنم که یک برنامه کاربردی است که میتواند روی سیستم های 32 بیتی و هم 64 بیتی نصب و اجرا شود و یکی کاربردهایش این است که کاربر میتواند Turbo C 16Bit تحت سیستم عامل داس را به راحتی درونش اجرا کند و شروع به برنامه نویسی کند حتی برنامه نویسی گرافیکی با هدر فایل graphics.h.

موفق باشید.

کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 

mk3000 از این پست سپاسگزاري کرده است

کاربران زیر از شما کاربر محترم جناب MISSILE تشکر کرده اند:
Mahdi1944, ARafiee, Hajj saber, ali-j, Z.R., TDCC, behrad90

New Member



no avatar
پست ها

4

تشکر کرده: 0 مرتبه
تشکر شده: 1 مرتبه
تاريخ عضويت

چهارشنبه 4 بهمن 1391 18:40

آرشيو سپاس: 4 مرتبه در 4 پست

Re: آموزش گرافیک با استفاده از کتابخانه Graphics.h در زبان +

توسط Hajj saber » سه شنبه 10 بهمن 1391 23:03

من اگه تو پروژم از فایل تصویری استفاده کنم و در پوشه ای که فایل اجرایی هست قرار بدم چطوری می تونم مسیر جایی که برنامه داره توش اجرا میشه رو داشته باشم که برای تابع readimagefile بذارم>؟<(برای شخص دیگه ای که برای مثال برنامه رو دانلود کرده)

کاربران زیر از شما کاربر محترم جناب Hajj saber تشکر کرده اند:
Z.R.

Captain I

Captain I



نماد کاربر
پست ها

204

تشکر کرده: 11 مرتبه
تشکر شده: 46 مرتبه
تاريخ عضويت

يکشنبه 31 مرداد 1389 12:47

آرشيو سپاس: 1541 مرتبه در 194 پست

Re: آموزش گرافیک با استفاده از کتابخانه Graphics.h در زبان +

توسط MISSILE » چهارشنبه 11 بهمن 1391 15:41

سلام دوست عزیز

برای این کار باید آدرس دهی تصویر مورد نظر را بصورت نسبی انجام دهید نه بصورت مطلق.

مثلا فایل اجرایی نهایی ما در داخل یک پوشه قرار دارد و عکسی بنام img با پسوند jpeg داریم کافیست عکس مورد نظر را در کنار این فایل اجرایی در داخل پوشه قرار دهیم و در تابع readimagefile پارامتر ورودی آدرس تصویر را بصورت زیر مقداردهی کنیم :

کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


موفق باشید.

mk3000 از این پست سپاسگزاري کرده است

کاربران زیر از شما کاربر محترم جناب MISSILE تشکر کرده اند:
TDCC, ARafiee, demorgan, behrad90, Z.R.

قبليبعدي

 


  • موضوعات مشابه
    پاسخ ها
    بازديدها
    آخرين پست

چه کسي حاضر است ؟

کاربران حاضر در اين انجمن: بدون كاربران آنلاين و 2 مهمان