تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
تصوير شاشة الكمبيوتر في سطور قليلة و بسرعة
#1
الكود التالي يوضح كيف تقوم بعمل CopyFromScreen الخاصة بأي جهاز كمبيوتر ثم حفظ الصورة في فهرس المشروع

لتنفيذ الكود ضع الكود في الحدث Load الخاص بالفورم كما هو موضح أدناه أو يمكن استخدام الكود مع اي باتون في الحدث Click

PHP كود :
Public Class Form1
    Private Sub Form1_Load
(sender As ObjectAs EventArgsHandles MyBase.Load
        Dim rect 
As Rectangle Screen.PrimaryScreen.Bounds
        Using scrBitmap 
As Bitmap Image.FromHbitmap(New Bitmap(rect.Widthrect.Size.Height).GetHbitmap(), Graphics.FromHwnd(IntPtr.Zero).GetHdc())
 
           Using g As Graphics Graphics.FromImage(scrBitmap)
 
               g.CopyFromScreen(rect.Locationrect.Locationrect.SizeCopyPixelOperation.SourceCopy)
 
               scrBitmap.Save((".\" & DateTime.Now.ToFileTimeUtc & ".jpg"), Imaging.ImageFormat.Jpeg)
            End Using
        End Using
    End Sub

End Class 

الكود اعلاه يمكن تنفيذه من خلال تايمر لتصوير الشاشة كل فترة زمنية معينة ثم يتم جمع كل الصور و تحويلها الي ملف Gif أو ملف فيديو

ويمكن الاستغناء عن السطر الذي يقوم بحفظ الصورة و نضيف الصور الي مصفوفة وبحيث يسهل التعامل معها كيفما نريد
الرد }}}
#2
رائع بارك الله فيك والله انك مبدع .

اقسم بالله انك عضو خيالي
امنى اني اوصل لدرجة احترافك
+
هل يمكنك شرح الكود بارك الله فيك يا مهندسنا الغالي
الرد }}}
تم الشكر بواسطة: Amir_Alzubidy , Amir_Alzubidy , silverlight
#3
+ لماذا لم تعلن عن متغير بدلا عن استخدام using
الرد }}}
تم الشكر بواسطة: Amir_Alzubidy
#4
تصوير شاشة الكمبيوتر بيحتاج اننا نخلق صورة بأبعاد تساوي ابعاد شاشة الكمبيوتر

مثلا لو نظرت الي الكود التالي  هو بسيط جدا و نحن هنا لا نقوم بتصوير شاشة الكمبيوتر نهائي
نحن فقط نخلق الصورة و نحفظها و هنا ستلاحظ ان و في حالة عدم وجود لون الجرافكس الموجودة في الدوت نت ستقوم بملأ الصورة باللون الأسود

PHP كود :
       Dim rect As Rectangle Screen.PrimaryScreen.Bounds
        Dim scrBitmap 
As Bitmap = New Bitmap(rect.Widthrect.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.Widthrect.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.Widthrect.Size.Height)
 
           Using g As Graphics Graphics.FromImage(scrBitmap)
 
               g.CopyFromScreen(rect.Locationrect.Locationrect.SizeCopyPixelOperation.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.Widthrect.Size.Height).GetHbitmap())
 
           Using g As Graphics Graphics.FromImage(scrBitmap)
 
               g.CopyFromScreen(rect.Locationrect.Locationrect.SizeCopyPixelOperation.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.Widthrect.Size.Height).GetHbitmap())
 
           'Using g As Graphics = Graphics.FromImage(scrBitmap)
            '
g.CopyFromScreen(rect.Locationrect.Locationrect.SizeCopyPixelOperation.SourceCopy)
 
           scrBitmap.Save((".\" & DateTime.Now.ToFileTimeUtc & ".jpg"), Imaging.ImageFormat.Jpeg)
            'End Using
        End Using 
لم اعلن عن متغير حتي يتم التخلص من الصورة مباشرة بعد تنفيذ الأمر من أجل عملية Disposing  للصورة التي تم تخليقها و ليس للصورة التي يتم حفظها
الرد }}}
#5
الف شكر و تقدير اخي عمر
ولكن ما فائدة الامر using ?
الرد }}}
تم الشكر بواسطة: Amir_Alzubidy
#6
اي كلاس في الدوت نت أساسه  Interface IDisposable يمكن فقط استخدام الأمر Using معه و الهدف منها التخلص من العنصر حتي لا يؤثر علي ذاكرة الكمبيوتر
و البديل المناسب لتلك الجمله هو استخدم Try Catch Finally End Try
الرد }}}
تم الشكر بواسطة: Basil Abdallah , Basil Abdallah , Amir_Alzubidy
#7
ذهب اخ عمر و الذهب ماينتج غير ذهب
بارك الله فيك و بعملك
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}
تم الشكر بواسطة: Amir_Alzubidy , silverlight
#8
بارك الله فيك
الرد }}}
تم الشكر بواسطة: silverlight
#9
جزاك الله خيرا
اريد توضيح هذه الجزئية وشكرا لك


إقتباس :و البديل المناسب لتلك الجمله هو استخدم Try Catch Finally End Try
الرد }}}
تم الشكر بواسطة:
#10
الأخ علي
الكود سيكون شيئا من هذا القبيل
PHP كود :
       Dim rect As Rectangle Screen.PrimaryScreen.Bounds
        Dim bmp 
As Bitmap Image.FromHbitmap(New Bitmap(rect.Widthrect.Size.Height).GetHbitmap(), Graphics.FromHwnd(IntPtr.Zero).GetHdc())
 
       Try
            Dim g 
As Graphics Graphics.FromImage(bmp)
 
           Try
                g
.CopyFromScreen(rect.Locationrect.Locationrect.SizeCopyPixelOperation.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 ) ضيف كريم