فى هذه الجزئية سنقوم بعمل بعض الرسم، يستخدم الرسم عندما نريد ان نغير او نعزز اداة او انشاءها من الصفر، للرسم نستخدم ماتوفره لنا WinForms
يتم الرسم فى طريقة نربطها مع الحدث Paint
System.Drawing تقدم لنا وصول الى الوظائف الأساسية ل GDI+ , الوظائف المتقدمة تجدها فى System.Drawing.Drawing2D و System.Drawing.Imaging و System.Drawing.Text. الصف Graphics يقدم طرقا للرسم على النافذة
فى مثالنا الأول سنقوم برسم بعض السطور على النافذة
lines.cs using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; class MForm : Form { public MForm() { Text = "Lines"; Size = new Size(280, 270); ResizeRedraw = true; Paint += new PaintEventHandler(OnPaint); CenterToScreen(); } void OnPaint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Pen pen = new Pen(Color.Black, 1); pen.DashStyle = DashStyle.Dot; g.DrawLine(pen, 20, 40, 250, 40); pen.DashStyle = DashStyle.DashDot; g.DrawLine(pen, 20, 80, 250, 80); pen.DashStyle = DashStyle.Dash; g.DrawLine(pen, 20, 120, 250, 120); pen.DashStyle = DashStyle.DashDotDot; g.DrawLine(pen, 20, 160, 250, 160); pen.DashPattern = new float[] {6f, 8f, 1f, 1f, 1f, 1f, 1f, 1f }; g.DrawLine(pen, 20, 200, 250, 200); g.Dispose(); } } class MApplication { public static void Main() { Application.Run(new MForm()); } }
رسمنا 5 اسطر كل منها له DashStyle مختلف
ResizeRedraw = true;عندما نعيد تحجيم النافذة، فيتم رسمها تلقائيا -ليس السلوك الإفتراضى-
Paint += new PaintEventHandler(OnPaint);نربط الحدث Paint بالطريقة OnPaint
void OnPaint(object sender, PaintEventArgs e) { ... }
هذا هو توقيع الطريقة OnPaint
Graphics g = e.Graphics;نحصل على كائن ال Graphics من الحدث e ، الرسم على النافذة فى الواقع يستدعى طرق خاصة من كائن ال Graphics
Pen pen = new Pen(Color.Black, 1); pen.DashStyle = DashStyle.Dot; g.DrawLine(pen, 20, 40, 250, 40);
ننشئ كائن القلم، يستخدم فى رسم حدود الأشكال ونحدد ال DashStyle له بإنه منقط dotted ، اخيرا نرسم السطر بإستخدام الطريقة DrawLine .. اول معامل هو القلم والأربع الباقيين هم س ، ص ، البداية والناهية
pen.DashPattern = new float[] {6f, 8f, 1f, 1f, 1f, 1f, 1f, 1f };يوجد قيم كثيرة لل DashStyle، وايضا يمكننا واحد خاص بينا بإستخدام الخاصية DashPattern.. ربما يكون شكله صعب من اول نظرة ولكنه ليس الا مصفوفة من القيم الممتلئة والفارغة
g.Dispose();نعلم ان لغة سى شارب تستخدم Garbage Collection .. اذا لماذا يجب علينا تحرير الموارد يدويا؟ هذا يزيد الفعالية. نحن نساعد ال Garbage Collection
Figure: Lines
اللون فى WinForms يمثل ب ARGB (الفا و احمر واخضر وازرق) ويوجد ايضا الوان معرفة مسبقا نستطيع استخدامها فى الرسم
colors.cs using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; class MForm : Form { public MForm() { Text = "Colors"; Size = new Size(360, 300); Paint += new PaintEventHandler(OnPaint); CenterToScreen(); } void OnPaint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; g.FillRectangle(Brushes.Sienna, 10, 15, 90, 60); g.FillRectangle(Brushes.Green, 130, 15, 90, 60); g.FillRectangle(Brushes.Maroon, 250, 15, 90, 60); g.FillRectangle(Brushes.Chocolate, 10, 105, 90, 60); g.FillRectangle(Brushes.Gray, 130, 105, 90, 60); g.FillRectangle(Brushes.Coral, 250, 105, 90, 60); g.FillRectangle(Brushes.Brown, 10, 195, 90, 60); g.FillRectangle(Brushes.Teal, 130, 195, 90, 60); g.FillRectangle(Brushes.Goldenrod, 250, 195, 90, 60); g.Dispose(); } } class MApplication { public static void Main() { Application.Run(new MForm()); } }
رسمنا 9 مستطيلات ب 9 الوان مختلفة
g.FillRectangle(Brushes.Sienna, 10, 15, 90, 60);الطريقة FillRectagle تقوم بملء المستطيل المحدد بفرشاة. وتأخذ معاملات س و ص (نقط اعلى اليسار) والعرض والإرتفاع
Figure: Colors
التهشير
فرشة التهشير تستخدم لملء داخل الشكل ويوجد بعض الأنمطة الجاهزة لإستخدامها
hatches.cs using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; class MForm : Form { public MForm() { Text = "Hatches"; Size = new Size(360, 300); Paint += new PaintEventHandler(OnPaint); CenterToScreen(); } void OnPaint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; HatchBrush hb = new HatchBrush(HatchStyle.Cross, Color.Black, this.BackColor); g.FillRectangle(hb, 10, 15, 90, 60); hb = new HatchBrush(HatchStyle.Percent05, Color.Black, this.BackColor); g.FillRectangle(hb, 130, 15, 90, 60); hb = new HatchBrush(HatchStyle.SolidDiamond, Color.Black, this.BackColor); g.FillRectangle(hb, 250, 15, 90, 60); hb = new HatchBrush(HatchStyle.DiagonalBrick, Color.Black, this.BackColor); g.FillRectangle(hb, 10, 105, 90, 60); hb = new HatchBrush(HatchStyle.Divot, Color.Black, this.BackColor); g.FillRectangle(hb, 130, 105, 90, 60); hb = new HatchBrush(HatchStyle.Wave, Color.Black, this.BackColor); g.FillRectangle(hb, 250, 105, 90, 60); hb = new HatchBrush(HatchStyle.ZigZag, Color.Black, this.BackColor); g.FillRectangle(hb, 10, 195, 90, 60); hb = new HatchBrush(HatchStyle.Sphere, Color.Black, this.BackColor); g.FillRectangle(hb, 130, 195, 90, 60); hb = new HatchBrush(HatchStyle.Shingle, Color.Black, this.BackColor); g.FillRectangle(hb, 250, 195, 90, 60); hb.Dispose(); g.Dispose(); } } class MApplication { public static void Main() { Application.Run(new MForm()); } }
هذه المرة نملء 9 مستطيلات ب 9 انمطة "تهشير"
HatchBrush hb = new HatchBrush(HatchStyle.Cross, Color.Black, this.BackColor);ننشئ كائن من الصف HatchBrush ومعاملاته هو نوع التهشير ولون الخلفية والوجه
g.FillRectangle(hb, 10, 15, 90, 60);نملء المستطيل بفرشة التهشير
Figure: Hatches
In computer graphics, gradient is a smooth blending of shades from light to dark or from one color to another. In 2D drawing programs and paint programs, gradients are used to create colorful backgrounds and special effects as well as to simulate lights and shadows. (answers.com)
gradients.cs using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; class MForm : Form { public MForm() { Text = "Gradients"; Size = new Size(350, 350); Paint += new PaintEventHandler(OnPaint); CenterToScreen(); } void OnPaint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Point pt1 = new Point(5, 5); Point pt2 = new Point(25, 25); Brush lg = new LinearGradientBrush(pt1, pt2, Color.Red, Color.Black); g.FillRectangle(lg, 20, 20, 300, 40); pt1 = new Point(5, 25); pt2 = new Point(20, 2); lg = new LinearGradientBrush(pt1, pt2, Color.Yellow, Color.Black); g.FillRectangle(lg, 20, 80, 300, 40); pt1 = new Point(5, 25); pt2 = new Point(2, 2); lg = new LinearGradientBrush(pt1, pt2, Color.Green, Color.Black); g.FillRectangle(lg, 20, 140, 300, 40); pt1 = new Point(25, 25); pt2 = new Point(15, 25); lg = new LinearGradientBrush(pt1, pt2, Color.Blue, Color.Black); g.FillRectangle(lg, 20, 200, 300, 40); pt1 = new Point(0, 10); pt2 = new Point(0, 20); lg = new LinearGradientBrush(pt1, pt2, Color.Orange, Color.Black); g.FillRectangle(lg, 20, 260, 300, 40); lg.Dispose(); g.Dispose(); } } class MApplication { public static void Main() { Application.Run(new MForm()); } }
نرسم 5 مستطيلات كل منها ممتلء بجرادينت خطى مختلف
Point pt1 = new Point(5, 5); Point pt2 = new Point(25, 25);
هاتان النقطتان هما النقاط المتحكمة فى الجرادينت
Brush lg = new LinearGradientBrush(pt1, pt2, Color.Red, Color.Black);ننشئ فرشاة لجرادينت خطى، ونستخدم نقاط التحكم والوان البلندينج
We create the LinearGradientBrush object. We use two controlling points and two blending colors.
Figure: Gradients
رسم نص "سلسلة حروف"
لرسم نص ما نستخدم الطريقة DrawString
lyrics.cs using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; class MForm : Form { public MForm() { Text = "You know I'm No Good"; Size = new Size(380, 450); Paint += new PaintEventHandler(OnPaint); CenterToScreen(); } void OnPaint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Font ft = new Font("Purisa", 10); SolidBrush br = new SolidBrush(Color.Black); PointF pt = new PointF(20.0f, 20.0f); g.DrawString("Meet you downstairs in the bar and heard", ft, br, pt); pt = new PointF(20.0f, 50.0f); g.DrawString("Your rolled up sleeves and your skull t-shirt", ft, br, pt); pt = new PointF(20.0f, 80.0f); g.DrawString("You say why did you do it with him today?", ft, br, pt); pt = new PointF(20.0f, 110.0f); g.DrawString("And sniffed me out like I was tanqueray", ft, br, pt); pt = new PointF(20.0f, 160.0f); g.DrawString("Cause you’re my fella, my guy", ft, br, pt); pt = new PointF(20.0f, 190.0f); g.DrawString("Hand me your stella and fly", ft, br, pt); pt = new PointF(20.0f, 220.0f); g.DrawString("By the time I’m out the door", ft, br, pt); pt = new PointF(20.0f, 250.0f); g.DrawString("You tear me down like roger moore", ft, br, pt); pt = new PointF(20.0f, 300.0f); g.DrawString("I cheated myself", ft, br, pt); pt = new PointF(20.0f, 330.0f); g.DrawString("Like I knew I would", ft, br, pt); pt = new PointF(20.0f, 360.0f); g.DrawString("I told ya, I was trouble", ft, br, pt); pt = new PointF(20.0f, 390.0f); g.DrawString("You know that I’m no good", ft, br, pt); g.Dispose(); } } class MApplication { public static void Main() { Application.Run(new MForm()); } }
هنا نقوم برسم كلمات الأغنية على النافذة
Font ft = new Font("Purisa", 10);نحدد الخط الى Purisa وبإرتفاع 10 نقاط
PointF pt = new PointF(20.0f, 20.0f); لرسم نص على النافذة، يجب ان نستخدم الأرقام الحقيقية
g.DrawString("Meet you downstairs in the bar and heard", ft, br, pt);الطريقة DrawString تأخذ المعاملات التالية
النص ، الخط ، الفرشاه، وكائن ال PointF
Figure: Lyrics
فى مثالنا الأخير سنرسم صورة على النافذة
redrock.cs using System; using System.Drawing; using System.Windows.Forms; class MForm : Form { private Bitmap castle; public MForm() { Text = "Red Rock"; loadImage(); ClientSize = new Size(castle.Width, castle.Height); Paint += new PaintEventHandler(OnPaint); CenterToScreen(); } void loadImage() { try { castle = new Bitmap("redrock.png"); } catch (Exception e) { Console.WriteLine(e.Message); Environment.Exit(1); } } void OnPaint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Rectangle r = new Rectangle(1, 1, castle.Width, castle.Height); g.DrawImage(castle, r); } } class MApplication { public static void Main() { Application.Run(new MForm()); } }
هذا الكود يقوم برسم الصورة
try { castle = new Bitmap("redrock.png"); } catch (Exception e) { Console.WriteLine(e.Message); Environment.Exit(1); }
نحمل صورة القلعة
Rectangle r = new Rectangle(1, 1, castle.Width, castle.Height);نحدد المستطيل اللذى سنقوم برسمه
g.DrawImage(castle, r);نرسم الصورة
Figure: Image
فى هذا الفصل قمنا بعمل بعض الرسم
Home Contents Top of Page