شنبه ۷ اسفند ۱۳۹۵
 
 
 
کلمه عبور خود را فراموش کرده اید؟
 

 
 
 مروری بر +GDI (قسمت دوم)
.NET Graphics
تاریخ ثبت:  ۸۷/۸/۲۵
تعداد نمایش:  ۴۷۸۴
  نویسنده: سعید هوشمند
 
   ۱۳  نفر تا این لحظه به این مقاله امتیاز داده اند.
 
   Bookmark and Share

   قسمت دوم  GDI+ مروری بر

در قسمت قبل با GDI آشنا شده و سپس ۳ بخش اصلی +GDI را توضیح داده و امکانات جدید اضافه شده به +GDI را برسی نمودیم.در ادامه قصد داریم تا به صورت کاربردی تر امکانات و ترسیمات پایه ای +GDI را برسی نماییم.  (قسمت اول مقاله را اينجا مطالعه كنيد)

تغییر در مدل برنامه نویسی

قبلاً گفتیم که تفاوت +GDI با GDI د رابزارهای جدید و مدل برنامه نویسی است. برنامه نویسی با +GDI در زمینه های زیر با برنامه نویسي در GDI متفاوت است.

·        Device Contexts, Handles, and Graphics Objects

·        Two Ways to Draw a Line  دو روش در ترسیم خط

·        Pens, Brushes, Paths, Images, and Fonts as Parameters

می توان از کلاس های فوق به عنوان پارامترهای متد های دیگر استفاده نمود.

·        Method Overloading

می توان الگوی آرگومان های متد های ترسیم را با Overloading کردن آنها به گونه ای که نیاز است تغییر داد.

·        No More Current Position

·        Separate Methods for Draw and Fill

·        Constructing Regions

 

کلاس Graphics

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

قبل از آن که اقدام به ترسیم اشکال نماییم ابتدا می بایست ناحیه ای گرافیکی را مشخص نماییم که ترسیمات بر روی آن انجام شود.همچنین بسیاری از ویژگیها را برای ایجاد ترسیمات تنظیم نماییم مثل Device Contexts, Handles اگر سابقه برنامه نویسی در زبان های مثل C را داشته باشید با این روال آشنایی دارید .امااین وظیفه را +GDI به عهده می گیرد و ما فقط کافی است ناحیه گرافیکی را برای آن مشخص نماییم که این کار با ایجاد شی ای از کلاس Graphics انجام می شود.

نکته: تمام کلاس هایی که از کلاس Control ارث بری دارند دارای یک متد به نام CreateGraphics هستند که شی ای از نوع کلاس Graphics رابر می گرداند .از آنجا که می دانیم کلاس های ارث برده از کلاس کنترل خود کنترل بوده و ناحیه و Handle مشخصی دارند پس شی گرافیکی برگردانده شده با استفاده از متد  CreateGraphics ،ناحیه گرافیکیش ناحیه کنترل و Device Contexts آن با توجه به  Handle کنترل ایجاد شده است به مثال زیر توجه کنيد .

Graphics MyGraphic = this.CreateGraphics(); 

کد بالا اگر در داخل کلاس فرم نوشته شود this به فرم جاری اشاره نموده پس ناحیه گرافیکی ما فرم جاری می شود.

نکته :برای ایجاد شی گرافیک متد های دیگری نیز وجود دارد که کاربرده های خاصی می تواند داشته باشد.

 Graphics.FromHwnd(IntPtr hwnd);

متدی جالب است که می توانید با دادن Handle یک کنترل ناحیه گرافیکی را به آن کنترل محدود نمایید یکی از کاربردهای جالب آن موقعی است که شما قصد دارید تا بر روی فرم ،کنترل و ... خارج از برنامتان ترسیماتی انجام دهید به عنوان مثال اگر بخواهید بر روی دسکتاپ اقدام به ترسیم نمایید کافی است تا Handle دسکتاپ را پیدا نموده و با استفاده از متد شی گرافیکی آن را ایجاد نمایید.

متد دیگر

Graphics.FromImage(Image image)

 این متد ناحیه ترسیم را محدود به یک کلاس از نوع Image که دربردارنده یک تصویر می باشد می نماید و شما می توانید ترسیمات را در آن انجام داده و تصویر را ذخیره نمایید. به عنوان مثال کاربردی آن اینکه، اگر شما بخواهید نرم افزاری برای ویرایش تصاویر ایجاد کنید باید تصویر را درون یک Picture box یا .. بار نموده و با استفاده از همین متد بر روی Image آن یک شی گرافیکی ایجاد نمایید.

 

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

Graphics MyGraphic = Graphics.FromImage(PictureBox1.Image);

که بر روی تصویر درون PictureBox1 یک شی گرافیکی با نام MyGraphic ایجاد می نمایید.

با فرض اینکه ناحیه گرافیکی را بر روی فرم ایجاد و نام آن را MyGraphic گذاشته باشیم.

Graphics MyGraphic = this.CreateGraphics();

 حال باید طریقه انجام ترسیمات را فرا گیریم:

خطوط ،منحنی ها و اشیاء (Lines, Curves, and Shapes)

خلاصه ای از گرافیک برداری

+GDI خطوط و مستطیل و اشکال دیگر را روی سیستم مختصاتی رسم می نماید .شما می توانید نوع های متفاوتی از مختصات را انتخاب نمایید اما مختصات پیش فرض مبداش گوشه سمت چپ و بالای اشکال است که محور x اشاره می کند یه راست و محور y  به پایین اشاره می کند.

یک مانیتور کامپیوتر تصویر را با آرایه ای مستطیلی از نقاط موسوم به پیکسل می سازد .تعداد پیکسل های نمایش داده شده توسط یک مانیتور از مانیتور دیگر می تواند متفاوت باشد و همینطور کاربر می تواند آن را تغییر دهد.

تمام اشکال لیست زیر توسط +GDI پشتیبانی می شود :

·        Lines

·        Rectangles

·        Ellipses

·        Arcs

·        Polygons

·        Cardinal spines

·        Bezier spines

کلاس Graphics در +GDI متد های زیر را برای ترسیم اشکال لیست بالا دارد:

 Drawling ،DrawRectangle،DrawEllipse،DrawPolygon، DrawArc،DrawCurve،DrawBezier

هر کدام از متدهایی بالا دارای اورلود هایی نیز می باشد که باعث می شود لیست های متفاوتی از پارامتر ها را بگیرد.

مثال زیر طریقه استفاده از یکی از متدها را نشان می دهد.

myGraphics.DrawRectangle(myPen, 20, 10, 100, 50);

Pens, Lines, and Rectangles:

برای ترسیم خطوط با استفاده از +GDI نیاز به ایجاد یک شی Graphics و یک شی Pen داریم .شی Graphics متد ترسیم خط را فراهم و شی Pen خصوصیات قلم را که در ترسیم خط استفاده می شود مانند رنگ و پهنا نگهداری می کند. در مثال زیر نحوه رسم یک خط مشخص شده است.

Pen myPen(Color(255, 0, 0, 255), 2);

myGraphics.DrawLine(myPen, 0, 0, 60, 30);

برای ترسیم یک مستطیل می بایست از متد DrawRectangle استفاده نمود به صورت.

Rect myRect(100, 50, 80, 40);

myGraphics.DrawRectangle(myPen, myRect);

or

myGraphics.DrawRectangle(myPen,100,50,80,40)

یک شی Rect متد هایی برای دستکاری اطلاعات مستطیل ها را دارا می باشد مثلاً متد Inflate  و Offset اندازه و موقعیت مستطیل را تغییر می دهد.

Ellipses and Arcs

یک بیصی با محدوده ی مستطیلی مشخص می شود شکل زیر این روند را نمایش می دهد.

برای ترسیم بیضی به یک شی گرافیک و یک شی قلم احتیاج است و متدی را که با آن می توان بیضی را رسم نمود متد DrawEllipse است.

myGraphics.DrawEllipse(myPen, 100, 50, 160, 80);

در خط بالا یک بیضی در نقطه شروع 100و 150و عرض 160 و ارتفاع 80 رسم خواهد شد.

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

Rect myRect(100, 50, 160, 80);

myGraphics.DrawEllipse(myPen, myRect);

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

myGraphics.DrawArc(myPen, 100, 50, 160, 80, 30, 180);

Polygons

یک چند ضلعی شکلی بسته که سه یا تعدادی بیشترظللع دارد .به عنوان مثال یک مثلث چند ظلعی است با 3 ظلع ،یک مستطیل چند ظلعی با 4 ظلع می باشد و یک پنج ظلعی چند ظلعی است با 5 ضلع.

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

 

Point[] points = new Point[3] { new Point(0,0), new Point(200, 200), new Point(150, 300) };

MyGraphic.DrawPolygon(new Pen(Color.Blue, 2), points);

Cardinal Splines

یک Cardinal Splines تعدادی منحنی های مجزا است که به هم پیوسته می شود تا یک منحنی طولانی را بوجود آورد .این نوع از منحنی با آرایه ای از نقاط مشخص می شود خروجی این منحنی دارای قوس های نرم است و نه تیز.

+GDI یک رابط دستگاهای گرافیکی است که به برنامه نویس اجازه می دهد تا برنامه هایی مستقل از دستگاه بنویسد سرویس های +GDI در مجموعه ای از کلاس های ++C قرار گرفته است.

myGraphics.DrawCurve (myPen, myPointArray, 3, 1.5f);

Bezier Splines

یک Bezier spine منحنی مخصوصی است که با 4 نقطه مشخص می شود . دو نقطه پایانی (P1,P2) و دو نقطه کنترلی (C1,C2)

نکته :این منحنی از نقطه P1 شروع و حرکت می کند به سمت نقطه کنترلی C1 .یک خط مماس با منحنی از P1 تا C1 رسم می شود و خط مماس دیگر از P2 تا C2 رسم می شود. (فرض کنید)

myGraphics.DrawBezier (myPen, 0, 0, 40, 20, 80, 150, 100, 10);

و نمونه های دیگر این نوع ترسیم:

 

ادامه دارد...

  کیفیت مقاله ارائه شده از نظر شما   
برای دادن رتبه به این مقاله می بایست Login کرده باشید.
  درباره نویسنده
سعید هوشمند
تخصص بنده در برنامه نویسی برنامه کاربردی وبرنامه نیسی شبکه و طراحی و پیاده سازی نرم افرار های جامع می باشد
همه مقاله های نوشته شده توسط این کاربر (۵)
 
  پیام جدید
صفحه ۱ - پیامهای اصلی ۱ تا ۱ از مجموع ۱ پیام اصلی
اولین قبلی بعدی

 عنوان فرستنده تاریخ
 
فرق سرعت رندر کردن عکس با طراحی گرافیکی روی یک کنترل حسن بابایی ۱۳۸۷/۸/۲۷
پاسخ به: فرق سرعت رندر کردن عکس با طراحی گرافیکی روی یک کنترل سعید هوشمند ۱۳۸۷/۸/۲۸
اولین قبلی بعدی

Copyright © 2006 - 2016 All Rights Reserved.
Please direct your questions or comments to