طريقة التقاط لقطة من الشاشه - سي شارب - مقـــالات - Top Coder
Welcome to our Site
الدخــول Or تسجـــيل
الأحد
2016-12-04
11:17 PM
تسجــــيل | دخـــول
الرئيسية » مقالات » سي شارب

طريقة التقاط لقطة من الشاشه
التقاط لقطة من الشاشه

مقـــدمه
سنعرض اليوم في مقالتنا موضوع جديد نعرض فيه طريقة بسيطة لإلتقاط صورة او لقطه حالية من الشاشه , الطريقه بسيطة وتعتمد على خطوات بسيطه جداً  
داله الإلتقاط
نعتمد في موضوعنا اليوم على كلاس يعرفه الكثيرون منا , الا وهو Graphics , فهذا الكلاس به العديد والعديد من الدوال التي توفر مصدر كبير لكل ما يخص الرسومات والجرافيك , وسنعتمد اليوم على داله يحتويها هذا الكلاس , من خلالها سنستطيع اخذ اي لقطة باي مساحه من الشاشه , الدالة تسمى CopyFromScreen , ويعتمد التكوين الاساسي لهذه الداله على ثلاث معاملات :
1- UpperLeftSource وهي من النوع Point ويمثل هذا المعامل احداثي الشاشه x , y الذي ستبدأ الداله اخذ اللقطه بداية منه .
2- UpperLeftDestination وهو ايضاً من النوع Point , ويمثل الاحداثي الذي ستوضع به اللقطة المأخزذه داخل الصورة التي ستخزن بها .
3- BlockRegionSize وهو من النوع Size ويمثل مقياس اللقطة المأخوذه من حيث العرض والارتفاع .

وهناك اربعة اشكال من تلك الداله تختلف بها المعاملات السابقه , ولكن هذه ابسط صور تلك الداله , وهي كافية للهذف المرجو منها .

ومن خلال المعاملات السابقه , تقوم الداله بأخذ لقطه بمقياس BlockRegionSize تبدأ من النقطه UpperLeftSource في الشاشه , ثم تخزن النتيجه في صوره وتكون نقطة بداية اللقطة في الاحداثي UpperLeftDestination داخل الصورة .

ولهذا الغرض قمنا بعمل الداله الاتيه التي تقوم باخذ اللقطه بمساحة الشاشه كامله , بدايه من النقطه 0 و 0 , وتوضع اللقطه في صورة من الاحدائي 0و 0 ايضا , وهذا كود الداله
Get Shot Method
 
حيث قمنا في البدايه بتعريف المتغير shotSize والذي يمثل مساحة اللقطه , وقمنا بأخذ قيمته من مساحة الشاشه كامله من خلال الخاصيه  Screen.PrimaryScreen.Bounds.Size وهي تمثل مساحة الشاشه الحاليه , ثم بعد ذلك قمنا بتعريف المتغير upperScreenPoint وهو يمثل نقطة بدايه الشاشه , واعطيناه القيمه 0 , 0 حيث سنبدأ اللقطة من البدايه - ويمكنك تغييره كما تشاء حسب المكان الذي تريد البدء منه - , وبعد ذلك عرفنا معاملاً اخر upperDestinationPoint وهو يمثل نقطة البدايه داخل الصورة الهدف , والذي ستوضع اللقطة به

قمنا ايضاً يعمل كائن جديد من النوع Bitmap وهو يمثل الصورة التي ستوضع بها اللقطة , حيث يكون مقياس الصورة هو نفس مقياس اللقطه , لذلك تم وضع قيمة عرض وطول الصورة بنفس قيم عرض و طول اللقطه , ثم بعد ذلك يأتي تعريف كائن جديد من الكلاس Graphics والذي سيقوم بالعملية الاهم في الموضوع وهو الالتقاط من الشاشه , تم وضع الصورة داخل هذا الكائن , بحيث سيقوم هو بأخذ اللقطة ووضعها في الصورة .

وبعد وضع تلك القيم تكون كل الامور جاهزه للعمل , حيث نقوم بالتطبيق من خلال الداله CopyFromScreen , بحيث توضع المعاملات الثلاث التي تم تعريفها مسبقاً , لتنتج لنا اللقطة المنشوده داخل الصورة Bitmap , تقوم الداله بارجاع تلك الصورة , لتقوم بعد ذلك باي اجراء تريد عليها
اخذ لقطة بدون من دون نافذة البرنامج
في حال تطبيقك تلك الاجراءات السابقه في برنامج معين , بحث تضغط على زر معين يأخذ لك اللقطه , فسوف تواجه مشكله , المشكة تتلخص في الفورم الخاصه بالبرنامج نفسه الذي تقوم من خلاله بأخذ اللقطه من خلاله , فالبرنامج سيكون ضمن لقطة الشاشه , لأنه منطقياً سيكون ظاهر امامك حتى تلتقط من خلاله , ولكن هذه المشكله تم إيجاد حل لها , ويتلخص الحل في النقاط الاتيه :
1- اخفاء البرنامج من خلال الداله Hide .
2- اخذ اللقطة .
3- اظهار البرنامج مره اخرى من خلال الداله Show .

لكن ايضاً حتى الا يمكن ان تظهر مشكله اخرى , وهي انه ومع سرعه تنفيذ الكود يمكن ان يكون البرنامج لم يختفي بشكل كامل بتنفيذ الداله Hide , ففي بعض الحالات تظهر الفورم وكأنها لم تختفي , واحياناً اخرى تكون شبه ظاهره , وربما في احيان اخرى تختفي , ولكن لتفادي تلك المشكله , وعدم ظهور تلك الاحتمالات الغير مرغوب فيها , تم حل المشكله من خلال تأخير اخذ اللقطه لجزء من الثانيه , حتى تكون النافذه اختفت بشكل كامل , وقد تم عمل هذا التأخير من خلال الداله Thread.Sleep , حيث تقوم هذا الداله بوقف عمل البرنامج حسب المده المعطاه في الداله بالملي ثانيه , وقد تم تأخير التنفيذ بمقدار 200 اي ما يعادل 1/5 من الثانيه , وهو وقت قصير ولكنه يعطي لنا المطلوب , وهذا يكون ترتيب الكود . حيث يتم الاخفاء ثم التأخير ثم اخذ اللقطه ثم الاظهار  
Get Shot Delay
ختـــام
وهكذا نكون قد عرضنا الفكره العامه والرئيسيه لهذا الموضوع  , ويمكنك الان استخدام تلك الطريقه في العديد من الافكار , فنحن في موقعنا نعتمد وبشكل كبير على عدم اعطاءك برامج جاهزه , ربما تكون تلك البرامج معتمدع على فكره صغيره , ولكننا نعطيك الفكره الصغيره لتبني بها برنامجك الخاص , وحتى يمكنك تطبيق طريقه تفكيرك في البرنامج .

والان وبعد قراءة المقاله , ما هي الافكار اتت الى ذهنك العديد من افكار البرامج التي يمكن ان تعتمد فيها على تلك الجزئيه الصغيره ؟؟  
تحميل المشروع
 Written by :  Mohammed Mahmoud
الفئة: سي شارب | أضاف: ham_mody2000 (2011-09-13 3:18 AM)
مشاهده: 1695 | تعليقات: 1 | وسمات: copyfromscreen, graphics, capture, Screen, C#, copy from screen, Screenshot | الترتيب: 0.0/0


أترك تعليقك من خلال حسابك على الفيس بوك

تعليقات مشتركي الموقع

مجموع المقالات: 1
1  
تسلم يا محمود على الكود الرائع والمنظم ده , أعتقد اننا ممكن نطور الفكرة البسيطة لفكرة عملية وهي اننا نعمل برنامج يراقب الجهاز وياخو برنت سكرين للشاشة كل فترة زمنية ويحفظها في فولدر خاص , ونظبط شوية اوبشنات بقى وبتاع ويبقى برنامج محترم كده , مع العلم ان الفكرة كويس جدا وسهله وانا كنت نفذتها زمان بـ VB6 الله يرحمه .

إضافة تعليق يستطيع فقط المستخدمون المسجلون
[ التسجيل | دخول ]
طريقة الدخول
بحث
Our Facebook community

تم إطلاق صفحة توب كودر على الفيس بوك

Advertisment
الأحـــدث
hitstatus
Copyright Mohammed Mahmoud © 2016
إنشاء موقع مجاني с uCoz