تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الحصول على صورة سطح المكتب بمميزات إضافية
#1
كاتب الموضوع : رغيد الطيب

بسم الله الرحيم الرحيم


لصورة سطح شعبية كبيرة فكثيرا هي البرامج التي يتطلب فيها الحصول على لقطة لسطح المكتب، مثل البرامج الرسومية او برامج مراقبة الشاشات و حتى الترفيهية منها.


وللحصول على صورة لسطح المكتب يوجد العديد من الطرق المعقدة و التي تستخدم الـ API او حافظة الوينذوز Clipboard كوسيط تخزيني قبل جلب الصورة الى برنامجنا


في هذا الدرس البسيط سأعرض طريقة بسيطة في فئة بسيطة تستخدم كود دوت نت نقي (بدون API او خلافه) ... للحصول على صورة لسطح المكتب .... مع بعض المزايا الاضافية.

تعتمد فئتنا البسيطة على الدالة CopyFromScreen من الكائن Graphics حيث تقوم بنسخ محتويات شاشة الكمبيوتر كاملة الى كائن جرافكس نستخدمه بعدها لإنشاء صورة لسطح المكتب.

وكود الفئة الجديدة rtaDesktop هو كالتالي :

كود :
Public Class rtaDesktop

Public Shared Image As Image
Public Shared Bounds As Rectangle

Shared Function GetDesktopImage(Optional ByVal Width As Integer = 0, Optional ByVal Height As Integer = 0, Optional ByVal ShowCursor As Boolean = True) As Image
Dim W As Integer = Screen.PrimaryScreen.Bounds.Width
Dim H As Integer = Screen.PrimaryScreen.Bounds.Height

Dim DesktopBitmap As New Bitmap(W, H)
Dim g As Graphics = Graphics.FromImage(DesktopBitmap)

g.CopyFromScreen(0, 0, 0, 0, New Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height), CopyPixelOperation.SourceCopy)
If ShowCursor Then Cursors.Default.Draw(g, New Rectangle(Cursor.Position, New Size(32, 32)))
g.Dispose()

If Width = 0 And Height = 0 Then
Image = DesktopBitmap
Return DesktopBitmap
Else
Dim ScaledBitmap As Image = DesktopBitmap.GetThumbnailImage(Width, Height, Nothing, IntPtr.Zero)
DesktopBitmap.Dispose()
Image = ScaledBitmap
Return ScaledBitmap
End If

End Function

End Class
تحتوي الفئة rtaDesktop على دالة واحدة من النوع Shared (Static) وبالتالي فيمكنك استخدامها بدون إنشاء كائن لها (اي سندها اى متغير) .. بالشكل التالي :

كود :
Dim Img As Image = rtaDesktop.GetDesktopImage()
الكود السابق سوف يخزن صورة لسطح المكتب في المتغير Img بينما وهذه الصورة سوف تتضمن صورة مؤشر الفارة ايضا عليها.




مؤشر الماوس


لكن توجد حالات لانريد ان يظهر فيها مؤشر الماوس على الصورة التي سنلتقطها لسطح المكتب.

في هذه الحالة يمكنك بسهولة تغيير السطر السابق الى التالي :

كود :
Dim Img As Image = rtaDesktop.GetDesktopImage(ShowCursor:=False)
هذا الكود سوف يجلب لنا صورة سطح المكتب السابقة ولكن دون مؤشر الفارة.

حيث False لإخفاء المؤشر و True لإظهاره.



ابعاد صورة سطح المكتب


في بعض الاحيان تحتاج الى اخذ صورة صغيرة لسطح المكتب !! ... تخيل معي انك تريد ان تقوم بارسال نسخة مصغرة من سطح المكتب الى كمبيوتر آخر في الشبكة لنقل صورة بعرض 300 * 200 .... طبعا من الممكن ان تقوم بأخذ صورة عادية كما في الطريقة السابقة وارسالها الى الكمبيوتر الآخر ثم تقوم هناك بعرضها داخل PictureBox صغير بحيث يقوم بتصغيير حجمها ليناسبه!

غير ان فعلك لهذا يعتبر خطأ كبير جدا ... لأنك غامرت بارسال بيانات كبيرة تؤثر سلبا على سرعة برنامجك وعلى اداء الشبكة ككل في حين انك لا تريد سوى صورة صغيرة لجزء معين هو 300 في 200 مثلا.

وللتخيل فظاعة المشكلة ينبغي ان تعرف ان الصورة بحجم كامل للشاشة في جهازي مثلا كان حجمها 1.4 ميجا بايت اي تقريبا ميجا ونصف بينما نفس الصورة بحجم 300 في 200 .... فقد وصل حجمها الى 111 كيلو ... اي ان حجم الاخيرة حوالي 8% من حجم الصورة الكاملة ... وبكلام آخر ان حجم الصورة الكاملة يزيد عن حجم صورتك الصغيرة بإثنا عشر مرة.

لهذا اذا اغفلت شيئا كهذا سيعني ان صورة واحدة ترسلها الى الشبكة يمكن لغيرك ان يرسل عشر صور بنفس التكلفة تبعك.


المهم في موضوعنا هذا انك يمكن ان تحصل على صورة بالابعاد التي تريدها لسطح المكتب بإستخدام فئتنا العزيزة كما يلي :

كود :
Dim Img As Image = rtaDesktop.GetDesktopImage(300,400,True)
في الكود السابق ستحصل على صورة بابعاد 300 في 200 وتحتوي على مؤشر الماوس.


ارجوا ان تستفيد من هذه الفئة البسيطة


تحياتي

السلام عليكم ورحمة الله وبركاته
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيفية تغيير خلفية محرر الكود في Visual Studio 2010 إلى صورة أبو عمر 0 566 06-09-15, 06:44 PM
آخر رد: أبو عمر
  اريد كود صور سطح المكتب فيديو مع الشرح salfig 0 619 14-08-13, 03:04 PM
آخر رد: salfig
  طريقة من أجمل الطرق لجعل الفورم على شكل صورة عندك أسامة أحمد 63 7,375 12-05-13, 10:39 PM
آخر رد: APP
  خطوات بسيطه لجعل الفورم على شكل صورة معينه و بشكل اكثر احترافية - بدون أدوات خارجية السكر المغرور 4 1,699 08-05-13, 01:20 AM
آخر رد: السكر المغرور
  معلومة :: تعلم كيف تحفظ صورة في My.Settings بدون الإحتياج إلى مسارها! أسامة أحمد 3 1,022 16-12-12, 06:25 PM
آخر رد: 3amo
  مقال - استخلاص الصور من صورة متحركة gif RaggiTech 1 567 05-10-12, 03:39 PM
آخر رد: RaggiTech
  مقال- كيف تلتقط صورة لأي جزء أنت تحدده علي سطح المكتب ثم تحفظها علي الهارد ديسك RaggiTech 0 431 05-10-12, 11:59 AM
آخر رد: RaggiTech
  يمكننا استخدام فيجول بايزيك 2008 لإنشاء صفحات أشرطة إضافية لـ Excel 2007 RaggiTech 0 353 05-10-12, 01:14 AM
آخر رد: RaggiTech

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


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