تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - الجزء الثالث
#1
كاتب الموضوع : silverlight

التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI
اللغة المستخدمة: الفيجوال بيسك
التطبيق: فيجوال استوديو 2005 و 2008
المستوي: التقييم متروك للقارئ
إعداد: مهندس / عمر أمين إبراهيم

الجزء الثالث: كيف نأخذ صورة لسطح المكتب

كما سبق وتحدثنا يوجد في الدوت نت كلاس هام جدا وهو Graphics Class وهذا الكلاس هو عصب +GDI وهناك طريقة Method بهذا الكلاس وهي CopyFromScreen وهذه الطريقة نستطيع باستخدامها أن نأخذ صورة لسطح المكتب. كيف نفعل ذلك
الفكرة ببساطة أننا نقوم بتعريف صورة Bitmap وأيضا Rectangle أبعاده تساوي أبعاد شاشة الكمبيوتر ثم باستخدام Graphics Class نقوم بأخذ صورة لسطح المكتب ثم يمكننا أن نستخدمها كما نشاء بعد ذلك والمثال التالي يوضح كيفية عمل ذلك
مثال علي ذلك
افتح مشروع جديد ثم أضف للفورم باتون و PictureBox ثم اكتب الكود بالشكل التالي في الحدث Click الخاص بالباتون


كود :
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Me.WindowState = FormWindowState.Minimized

Dim bounds As Rectangle = Screen.PrimaryScreen.Bounds
Dim screenshot As System.Drawing.Bitmap = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
Dim graph As Graphics = Graphics.FromImage(screenshot)
graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)

PictureBox1.Image = screenshot.GetThumbnailImage(PictureBox1.Width, PictureBox1.Height, Nothing, Nothing)

Me.WindowState = FormWindowState.Normal

End Sub

End Class
الأن لنقوم بتحويل هذا الكود الي دالة Function ونجعله أكثر فعالية ولنطلق علي الدالة اسم GetImageFromDeskTop وطبعا من الممكن الخروج بأكثر من دالة من الكود أعلاه والكود التالي يوضح شكل الدالة


كود :
Public Shared Function GetImageFromDeskTop() As Bitmap

Dim bounds As Rectangle = Screen.PrimaryScreen.Bounds
Dim screenShot As System.Drawing.Bitmap = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
Dim graph As Graphics = Graphics.FromImage(screenShot)
graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)

Return screenShot

End Function
المثال التالي يوضح كيفية استخدام هذه Function
افتح مشروع جديد ثم أضف للفورم باتون و PictureBox ثم اكتب الكود بالشكل التالي في الحدث Click الخاص بالباتون


كود :
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Me.WindowState = FormWindowState.Minimized
Dim scrBmp As Bitmap = GetImageFromDeskTop()
PictureBox1.Image = scrBmp.GetThumbnailImage(PictureBox1.Width, PictureBox1.Height, Nothing, Nothing)
Me.WindowState = FormWindowState.Normal

End Sub

Public Shared Function GetImageFromDeskTop() As Bitmap

Dim bounds As Rectangle = Screen.PrimaryScreen.Bounds
Dim screenShot As System.Drawing.Bitmap = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
Dim graph As Graphics = Graphics.FromImage(screenShot)
graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)

Return screenShot

End Function

End Class
والأن لنبني أشكالا أخري لهذه Function وسنحتفظ بنفس الاسم للدالة وهو GetImageFromDesktop
الكود التالي يوضح شكل أخر لهذه Function


كود :
Public Shared Function GetImageFromDeskTop(ByVal Bounds As Rectangle) As Bitmap

Dim screenShot As System.Drawing.Bitmap = New System.Drawing.Bitmap(Bounds.Width, Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
Dim graph As Graphics = Graphics.FromImage(screenShot)
graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)

Return screenShot

End Function
سنلاحظ في الدالة اعلاه أننا أعطينا المستخدم أفضلية تحديد أبعاد الجزء الذي يستطيع تصويره من علي سطح المكتب

والكود التالي يوضح شكل أخر لهذه Function


كود :
Public Shared Function GetImageFromDeskTop(ByVal Bounds As Rectangle, ByVal Owner As Form) As Bitmap

Dim frm As Form = Owner

Owner.WindowState = FormWindowState.Minimized
Dim screenShot As System.Drawing.Bitmap = New System.Drawing.Bitmap(Bounds.Width, Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
Dim graph As Graphics = Graphics.FromImage(screenShot)
graph.CopyFromScreen(Bounds.X, Bounds.Y, 0, 0, Bounds.Size, CopyPixelOperation.SourceCopy)

Owner.WindowState = FormWindowState.Normal

Return screenShot

End Function
سنلاحظ في الدالة اعلاه أننا أعطينا المستخدم أفضلية تحديد أبعاد الجزء الذي يستطيع تصويره من علي سطح المكتب وأيضا الأفضلية لجعل الفورم State تساوي Minimize ثم تتحول القيمة الي Normal بعد أخذ الصورة
والكود التالي يوضح كيفية استخدام الدالة الأخيرة


كود :
Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim scrBmp As Bitmap = GetImageFromDeskTop(New Rectangle(100, 100, 200, 200), Me)
PictureBox1.Image = scrBmp.GetThumbnailImage(PictureBox1.Width, PictureBox1.Height, Nothing, Nothing)

End Sub

Public Shared Function GetImageFromDeskTop(ByVal Bounds As Rectangle, ByVal Owner As Form) As Bitmap

Dim frm As Form = Owner

Owner.WindowState = FormWindowState.Minimized
Dim screenShot As System.Drawing.Bitmap = New System.Drawing.Bitmap(Bounds.Width, Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
Dim graph As Graphics = Graphics.FromImage(screenShot)
graph.CopyFromScreen(Bounds.X, Bounds.Y, 0, 0, Bounds.Size, CopyPixelOperation.SourceCopy)

Owner.WindowState = FormWindowState.Normal

Return screenShot

End Function

End Class



بالتوفيق

أخوكم عمر
}}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مقدمة إلي إخفاء المعلومات - الجزء الأول silverlight 5 150 07-01-17, 10:44 PM
آخر رد: Basil Abdallah
  مقدمة إلي إخفاء المعلومات - الجزء الثاني silverlight 1 91 06-01-17, 11:52 AM
آخر رد: silverlight
  مشروع لجلب الصور من الماسحة الضوئية (Scanner) m.sami.ak 13 4,239 31-12-16, 11:47 PM
آخر رد: Basil Abdallah
  التعامل مع الملفات الصوتية ........دردشة برمجية RaggiTech 7 3,182 26-12-16, 02:40 AM
آخر رد: sayed fox
  كيفية قراءة ملف باستخدام IntPtr الخاص بالملف silverlight 3 96 24-12-16, 03:13 AM
آخر رد: silverlight
  التعامل مع جهاز الكمبيوتر من Command Prompt silverlight 7 182 22-12-16, 06:07 PM
آخر رد: silverlight
Video [درس فيديو] هام مرة اخري تحذير للجميع في التعامل مع try والتكرار لعدد كبير ali.alfoly 1 106 13-12-16, 03:59 PM
آخر رد: Fantastico
  [مقال] دوال التعامل مع النصوص Strings - VB.NET ابو ليلى 5 207 12-12-16, 10:32 PM
آخر رد: ابو ليلى
  [درس فيديو] تحذير هام في التعامل مع For و Try ali.alfoly 3 193 07-12-16, 12:43 AM
آخر رد: silverlight
Wink [مقال] كفية التعامل مه الجملة الشرطية IF alims 8 3,728 19-11-16, 01:06 AM
آخر رد: LoveVb

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم