المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 67
تم شكره 6159 مرات في 1035 مشاركات
22-12-16, 07:17 PM
(آخر تعديل لهذه المشاركة : 22-12-16, 07:22 PM {2} بواسطة silverlight.)
الكود التالي يوضح كيف تقوم بعمل CopyFromScreen الخاصة بأي جهاز كمبيوتر ثم حفظ الصورة في فهرس المشروع
لتنفيذ الكود ضع الكود في الحدث Load الخاص بالفورم كما هو موضح أدناه أو يمكن استخدام الكود مع اي باتون في الحدث Click
PHP كود :
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim rect As Rectangle = Screen.PrimaryScreen.Bounds Using scrBitmap As Bitmap = Image.FromHbitmap(New Bitmap(rect.Width, rect.Size.Height).GetHbitmap(), Graphics.FromHwnd(IntPtr.Zero).GetHdc()) Using g As Graphics = Graphics.FromImage(scrBitmap) g.CopyFromScreen(rect.Location, rect.Location, rect.Size, CopyPixelOperation.SourceCopy) scrBitmap.Save((".\" & DateTime.Now.ToFileTimeUtc & ".jpg"), Imaging.ImageFormat.Jpeg) End Using End Using End Sub
End Class
الكود اعلاه يمكن تنفيذه من خلال تايمر لتصوير الشاشة كل فترة زمنية معينة ثم يتم جمع كل الصور و تحويلها الي ملف Gif أو ملف فيديو
ويمكن الاستغناء عن السطر الذي يقوم بحفظ الصورة و نضيف الصور الي مصفوفة وبحيث يسهل التعامل معها كيفما نريد
المشاركات : 341
المواضيع 83
الإنتساب : Nov 2016
السمعة :
17
الشكر: 231
تم شكره 299 مرات في 178 مشاركات
22-12-16, 07:26 PM
(آخر تعديل لهذه المشاركة : 22-12-16, 07:31 PM {2} بواسطة Basil Abdallah.)
رائع بارك الله فيك والله انك مبدع .
اقسم بالله انك عضو خيالي
امنى اني اوصل لدرجة احترافك
+
هل يمكنك شرح الكود بارك الله فيك يا مهندسنا الغالي
المشاركات : 341
المواضيع 83
الإنتساب : Nov 2016
السمعة :
17
الشكر: 231
تم شكره 299 مرات في 178 مشاركات
+ لماذا لم تعلن عن متغير بدلا عن استخدام using
المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 67
تم شكره 6159 مرات في 1035 مشاركات
22-12-16, 09:01 PM
(آخر تعديل لهذه المشاركة : 22-12-16, 09:08 PM {2} بواسطة silverlight.)
تصوير شاشة الكمبيوتر بيحتاج اننا نخلق صورة بأبعاد تساوي ابعاد شاشة الكمبيوتر
مثلا لو نظرت الي الكود التالي هو بسيط جدا و نحن هنا لا نقوم بتصوير شاشة الكمبيوتر نهائي
نحن فقط نخلق الصورة و نحفظها و هنا ستلاحظ ان و في حالة عدم وجود لون الجرافكس الموجودة في الدوت نت ستقوم بملأ الصورة باللون الأسود
PHP كود :
Dim rect As Rectangle = Screen.PrimaryScreen.Bounds Dim scrBitmap As Bitmap = New Bitmap(rect.Width, rect.Size.Height) scrBitmap.Save((".\" & DateTime.Now.ToFileTimeUtc & ".jpg"), Imaging.ImageFormat.Jpeg)
الكود التالي مشابه تماما للكود أعلاه و فقط عليك ان تلاحظ انني ملأت الصورة باللون الشفاف حاول تغير اللون و لتري ما سيحدث معك
PHP كود :
Dim rect As Rectangle = Screen.PrimaryScreen.Bounds Dim scrBitmap As Bitmap = New Bitmap(rect.Width, rect.Size.Height) Using g As Graphics = Graphics.FromImage(scrBitmap) g.Clear(Color.Transparent) End Using scrBitmap.Save((".\" & DateTime.Now.ToFileTimeUtc & ".jpg"), Imaging.ImageFormat.Jpeg)
عموما كل الطرق ستؤدي لنفس الغرض
الفكرة فقط في الكود الأول هو الحصول علي اللون الشائع في شاشات الكمبيوتر بشكل عام
و نملأ به الصورة
ثم نقوم بتصوير الشاشة و هذا ما يمكنك ان تطلق عليه MaskedImage
أي أن الصورة الظاهرة لكي تراها العين لها خلفية بلون ثابت كأنهم صورة مرسومة فوق صورة
وهذا الأمر له علاقة بشفافية الصور بشكل عام أيضا له علاقة بالفورم و الكونترول خصوصا و ان الفورم أو كل الكونترول يتم رسمهم علي صورة أصلا
عموما الكود يمكن كتابته بصور اخري كالتالي
PHP كود :
Dim rect As Rectangle = Screen.PrimaryScreen.Bounds Using scrBitmap As Bitmap = New Bitmap(rect.Width, rect.Size.Height) Using g As Graphics = Graphics.FromImage(scrBitmap) g.CopyFromScreen(rect.Location, rect.Location, rect.Size, CopyPixelOperation.SourceCopy) scrBitmap.Save((".\" & DateTime.Now.ToFileTimeUtc & ".jpg"), Imaging.ImageFormat.Jpeg) End Using End Using
أ و كالتالي
PHP كود :
Dim rect As Rectangle = Screen.PrimaryScreen.Bounds Using scrBitmap As Bitmap = Image.FromHbitmap(New Bitmap(rect.Width, rect.Size.Height).GetHbitmap()) Using g As Graphics = Graphics.FromImage(scrBitmap) g.CopyFromScreen(rect.Location, rect.Location, rect.Size, CopyPixelOperation.SourceCopy) scrBitmap.Save((".\" & DateTime.Now.ToFileTimeUtc & ".jpg"), Imaging.ImageFormat.Jpeg) End Using End Using
حاول توقف السطر الخاص بتصوير الشاشة و لتري ماذا سيحدث معك كالتالي
PHP كود :
Dim rect As Rectangle = Screen.PrimaryScreen.Bounds Using scrBitmap As Bitmap = Image.FromHbitmap(New Bitmap(rect.Width, rect.Size.Height).GetHbitmap()) 'Using g As Graphics = Graphics.FromImage(scrBitmap) 'g.CopyFromScreen(rect.Location, rect.Location, rect.Size, CopyPixelOperation.SourceCopy) scrBitmap.Save((".\" & DateTime.Now.ToFileTimeUtc & ".jpg"), Imaging.ImageFormat.Jpeg) 'End Using End Using
لم اعلن عن متغير حتي يتم التخلص من الصورة مباشرة بعد تنفيذ الأمر من أجل عملية Disposing للصورة التي تم تخليقها و ليس للصورة التي يتم حفظها
المشاركات : 341
المواضيع 83
الإنتساب : Nov 2016
السمعة :
17
الشكر: 231
تم شكره 299 مرات في 178 مشاركات
الف شكر و تقدير اخي عمر
ولكن ما فائدة الامر using ?
المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 67
تم شكره 6159 مرات في 1035 مشاركات
22-12-16, 10:19 PM
(آخر تعديل لهذه المشاركة : 22-12-16, 10:22 PM {2} بواسطة silverlight.)
اي كلاس في الدوت نت أساسه Interface IDisposable يمكن فقط استخدام الأمر Using معه و الهدف منها التخلص من العنصر حتي لا يؤثر علي ذاكرة الكمبيوتر
و البديل المناسب لتلك الجمله هو استخدم Try Catch Finally End Try
المشاركات : 660
المواضيع 39
الإنتساب : Feb 2014
السمعة :
196
الشكر: 1420
تم شكره 1747 مرات في 622 مشاركات
ذهب اخ عمر و الذهب ماينتج غير ذهب
بارك الله فيك و بعملك
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
المشاركات : 1,564
المواضيع 265
الإنتساب : Sep 2013
السمعة :
29
الشكر: 652
تم شكره 1047 مرات في 410 مشاركات
جزاك الله خيرا
اريد توضيح هذه الجزئية وشكرا لك
إقتباس :و البديل المناسب لتلك الجمله هو استخدم Try Catch Finally End Try
المشاركات : 1,486
المواضيع 101
الإنتساب : Sep 2012
السمعة :
127
الشكر: 67
تم شكره 6159 مرات في 1035 مشاركات
الأخ علي
الكود سيكون شيئا من هذا القبيل
PHP كود :
Dim rect As Rectangle = Screen.PrimaryScreen.Bounds Dim bmp As Bitmap = Image.FromHbitmap(New Bitmap(rect.Width, rect.Size.Height).GetHbitmap(), Graphics.FromHwnd(IntPtr.Zero).GetHdc()) Try Dim g As Graphics = Graphics.FromImage(bmp) Try g.CopyFromScreen(rect.Location, rect.Location, rect.Size, CopyPixelOperation.SourceCopy) bmp.Save((".\" & DateTime.Now.ToFileTimeUtc & ".jpg"), Imaging.ImageFormat.Jpeg) Catch ex As Exception Finally If g IsNot Nothing Then g.Dispose() g = Nothing End If End Try Catch ex As Exception Finally If bmp IsNot Nothing Then bmp.Dispose() bmp = Nothing End If End Try
المشاركات : 1,472
المواضيع 354
الإنتساب : Apr 2016
السمعة :
334
الشكر: 3441
تم شكره 2460 مرات في 1124 مشاركات
|