PDA

View Full Version : آموزش برنامه نویسی GDI در دات نت



Mohammadreza Heidari
جمعه 19 مرداد 1386, 00:27 صبح
با سلام

در ابتدا میخوام یک توضیح مختصر در مورد GDI و +GDI بدم تا کسایی که نمیدونن ، بدونن :لبخند:

+GDI یکی از زیر سیستم های موجود در سیستم عامل Windows XP یا Windows Server 2003 هست که وظیفه اصلیش نمایش اطلاعات بر روی یک خروجی از قبیل صفحه نمایش یا مانیتور و چاپگر یا پرینتر هست.

GDI مخفف کلمه Graphic Device Interface که در سیستم های قدیمی تر مانند Windows 98 , Me به کار می رفته و امروزه در سیستم های جدیدتر که بالا اسمشون رو بردم از +GDI استفاده میشه. این سیستم یعنی +GDI به شما اجازه میده بدون نیاز داشتن به علوم بیشتری در مورد سخت افزار گرافیک و مانیتور و یا پرینتر کارهای مورد نیاز رو انجام بدین.

از جمله این کارها به چند مثال اشاره میکنم :

*ایجاد فرم ها و کنترل هایی با گرافیک بهتر و زیباتر
*شکل دهی به فرم ها و کنترل ها ( ایجاد فرم دایره ای شکل و .... )
*کار با Image ها و ایجاد انواع فیلتر بر روی عکس
*کار با Bitmap ها و خواص Transparent

و موارد بسیار دیگر.

حالا اگر مایل باشید من شروع کنم و ادامه مطالب رو برای شما بنویسم ؟
:لبخندساده::لبخندساده::لبخن ساده::بوس:

Mohammadreza Heidari
جمعه 19 مرداد 1386, 00:49 صبح
این هم نمونه برنامه ای که خودم دارم مینویسم
البته عکس های برنامه هست ولی خلاصه نمونه کوچکی از کار با +GDI هست

VisualStudio
جمعه 19 مرداد 1386, 14:19 عصر
حالا اگر مایل باشید من شروع کنم و ادامه مطالب رو برای شما بنویسم ؟


خیلی خوبه ادامه بدید

Mohammadreza Heidari
جمعه 19 مرداد 1386, 17:41 عصر
بخش اول :


معرفی کلاس های مهم +GDI
--------------------------------------------------------------------------

فضای نامی که در DotNet برای +GDI اختصاص داده شده است System.Drawing میباشد که در این فضای نامی چندین کلاس و فضاهای نامی دیگه وجود داره.
از جمله :



System.Drawing
System.Drawing.Drawing2D
System.Drawing.Printing
System.Drawing.Text
System.Drawing.Design



ابتدا با System.Drawing شروع میکنم :


Graphics :
مهم ترین کلاس در این بخش کلاس Graphics میباشد. این کلاس برای کشیدن یک یا چند خط ، دایره ، چندضلعی ، مستطیل ، مربع ، Image ، متن و غیره هست.


Pen :
این کلاس برای مشخص کردن رنگ قلم میباشد. که برای کشیدن خط ،دایره و ... در کلاس Graphics استفاده میشود.


برای درک بهتر یک نمونه برنامه با VB.Net نوشتم :



PublicClass Form1
PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim objGr As Graphics = Me.CreateGraphics
objGr.DrawLine(New Pen(Color.Red, 2.0), 10, 50, 110, 150)
EndSub
EndClass



در این نمونه برنامه ما برای اینکه بتونیم بر روی فرم یک خط بکشیم یک object از نوع System.Drawing.Graphics ایجاد میکنیم و سپس برای ارتباط با گرافیک فرم متد CreateGraphics را به objGr پاس میکنیم.


در دستور بعدی به وسیله متد DrawLine یک خط بر روی فرم میکشیم. و به وسیله کلاس Pen رنگ و ضخامت قلمی که خط را میکشد مشخص شده است و اعداد بعدی که ورودی متد میباشند به ترتیب X , Y شروع خط و X ,Y پایان خط هستند که در مورد X , Y هم مفصل توضیح میدم.


این هم عکس برنامه :



منتظر بقیه آموزش باشید. :لبخندساده:

Mohammadreza Heidari
شنبه 20 مرداد 1386, 12:32 عصر
در این تصویر تا جایی که میتونستم سعی کردم X , Y رو شرح بدم.

تو این عکس

اولا : محور X , Y رو نمایش دادم.
دوما : Point شروع رو به رنگ آبی و پایان رو به رنگ قرمز نمایش دادم
سوما : یک نمونه خط رو در این Point ها نمایش دادم که به رنگ سبز هستش.

امیدوارم که مفید باشه.:بوس:

Mohammadreza Heidari
دوشنبه 22 مرداد 1386, 14:18 عصر
برای کشیدن کمان :



Dim gr As Graphics = Me.CreateGraphics
Dim p As Pen = New Pen(Color.Red, 2.0)
gr.DrawArc(p, 0, 0, 50, 50, 0, 180)
gr.DrawArc(p, 55, 0, 50, 50, 0, 160)


پارامتر های ورودی :

1: Pen
2: Start X
3: Start Y
4: Width
5:Height
6:زاویه شروع
7: زاویه کشش کمان

در ضمن زاویه شروع همیشه مانند عقربه ساعت روی 3 میباشد و جهت کشش هم در جهت عقربه های ساعت میباشد.

Mohammadreza Heidari
چهارشنبه 24 مرداد 1386, 01:01 صبح
ظاهرا مطالبی که در موردشون مینویسم زیاد مفید نیست به همین دلیل سعی میکنم از این به بعد مطالبی در حد حرفه ای بیان کنم.

امیدوارم این بار مفید واقع بشه.

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

Mohammadreza Heidari
چهارشنبه 24 مرداد 1386, 01:21 صبح
شما میتوانید از Gamma Correction در کلاس LinerGradiantBrush استفاده کنید. برای این کار باید مقدار خاصیت GammaCorrection را True قرار بدهید تا از این حالت استفاده کنید.

نکته : مقدار خاصیت GammaCorrection در حالت پیش فرض False میباشد.

به عنوان مثال دو مستطیل ایجاد میکنیم و هر دوی آنها را با یک LinerGradiantBrush پر میکنیم. یکی از مستطیل ها همراه با Gamma پر شده است و دیگری به صورت ساده.

کد ویژوال بیسیک دات نت :


Dim linGrBrush AsNew LinearGradientBrush( _
New Point(0, 10), _
New Point(200, 10), _
Color.Red, _
Color.Blue)
e.Graphics.FillRectangle(linGrBrush, 0, 0, 200, 50)
linGrBrush.GammaCorrection = True
e.Graphics.FillRectangle(linGrBrush, 0, 60, 200, 50)


کد سی شارپ دات نت :



LinearGradientBrush linGrBrush = new LinearGradientBrush(
newPoint(0, 10),
newPoint(200, 10),
Color.Red,
Color.Blue);
e.Graphics.FillRectangle(linGrBrush, 0, 0, 200, 50);
linGrBrush.GammaCorrection = true;
e.Graphics.FillRectangle(linGrBrush, 0, 60, 200, 50);


این کد ها را به رویداد Paint اضافه کنید و برنامه را اجرا کنید.

مستطیل اول بدون Gamma میباشد و دومی با Gamma :

DataMaster
چهارشنبه 24 مرداد 1386, 12:34 عصر
خسته نباشید
ان شالله هر وقت که مقاله کامل شد PDF اون یادتون نره

Mohammadreza Heidari
چهارشنبه 24 مرداد 1386, 12:49 عصر
ان شالله هر وقت که مقاله کامل شد PDF اون یادتون نره

به روی چشم

VisualStudio
دوشنبه 12 شهریور 1386, 22:17 عصر
ظاهرا قصد ندارید اون را ادامه بدید

danial82
یک شنبه 07 بهمن 1386, 07:14 صبح
منتظر ادامه آموزش هستیم

mehrzad007
دوشنبه 08 بهمن 1386, 10:42 صبح
http://dotnetsource.com/fa/forum/default.aspx?g=posts&t=4257
من اینجا یه مقدار در این مورد نوشتم البته هنوز کامل نشده اما خوب بدک نیست . دوست داشتید اینو بخونید .

elhamnemati
چهارشنبه 12 آبان 1389, 01:12 صبح
ببخشید تمام رنگهای یک تصویر با چه کدهایی میتوانیم در زبان #cبنویسیم :لبخندساده:

MicrosoftH@ymail.com
سه شنبه 19 بهمن 1389, 10:33 صبح
واقعا جالب بود منتظرم که ادامش بدید