تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] ثلاثة ايام من المحاولة , >الفاشلة< : كود تصوير 60 صورة في الثانية
#1
Exclamation 
السلام عليكم ورحمة الله وبركاته :

احاول عمل برنامج يقوم بتصوير 60 صورة في الثانية او اكثر

اضفت كود يخبرني كم فريم صور

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

التقاط الصورة
حفظ الصورة
التقاط الصورة
حفظ الصورة

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

التقاط الصورة
التقاط الصورة
التقاط الصورة
حفظ الصور


انتظر الرد ...
الرد
تم الشكر بواسطة:
#2
وعليكم السلام ورحمة الله وبركاته

اخي الفاضل ارنا محاولتك اولآ لكي نفهم طلبك اكثر ونتمكن من مساعدتك في ايجاد المشكلة ان شاء الله
الرد
تم الشكر بواسطة: SnTnt , asemshahen5
#3
(28-10-19, 10:34 PM)3booody كتب : وعليكم السلام ورحمة الله وبركاته

اخي الفاضل ارنا محاولتك اولآ لكي نفهم طلبك اكثر ونتمكن من مساعدتك في ايجاد المشكلة ان شاء الله
اخر كود قد قمت بتعديلة 

هاذا الكود يقوم بألتقاط الصورة وحفظها

كود :
Private Sub Timer4_Tick_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick
       graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
       screenshot.Save(temp & "\" & framecount & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
       framecount = frame
       frame += 1
       Label6.Text = frame
   End Sub
هاذا ما وضعته في حدث الفورم لود 

كود :
Dim screenshot As System.Drawing.Bitmap
       Dim graph As Graphics
       bounds = Screen.PrimaryScreen.Bounds
       screenshot = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
       graph = Graphics.FromImage(screenshot)
لاحظ كود
 screenshot.Save(temp & "\" & framecount & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
اذا ازلت هاذا الكود يقوم بفعل المطلوب ولا يوجد تـأخير بين الصورة الاولى و الثانية
الرد
تم الشكر بواسطة:
#4
تفضل اخي هذه محاولتي

كود :
Dim screenshot As System.Drawing.Bitmap
   Dim bit As New List(Of Bitmap)
   Dim graph As Graphics
   Dim frame As Integer = 0
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Bounds = Screen.PrimaryScreen.Bounds
       screenshot = New System.Drawing.Bitmap(Bounds.Width, Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
       graph = Graphics.FromImage(screenshot)
   End Sub

   Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       If frame = 60 Then
           Timer1.Stop()
           Return
       End If
       graph.CopyFromScreen(Bounds.X, Bounds.Y, 0, 0, Bounds.Size, CopyPixelOperation.SourceCopy)
       bit.Add(screenshot)
       frame += 1
       Label1.Text = frame
   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Timer1.Enabled = True
   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       Dim n As Integer = 0
       For Each img As Bitmap In bit
           img.Save("C:\Users\3bo0ody\Desktop\ima\ima" & n & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
           n += 1
       Next
   End Sub
الرد
تم الشكر بواسطة: SnTnt , asemshahen5
#5
(28-10-19, 11:07 PM)3booody كتب : تفضل اخي هذه محاولتي

كود :
Dim screenshot As System.Drawing.Bitmap
   Dim bit As New List(Of Bitmap)
   Dim graph As Graphics
   Dim frame As Integer = 0
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Bounds = Screen.PrimaryScreen.Bounds
       screenshot = New System.Drawing.Bitmap(Bounds.Width, Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
       graph = Graphics.FromImage(screenshot)
   End Sub

   Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       If frame = 60 Then
           Timer1.Stop()
           Return
       End If
       graph.CopyFromScreen(Bounds.X, Bounds.Y, 0, 0, Bounds.Size, CopyPixelOperation.SourceCopy)
       bit.Add(screenshot)
       frame += 1
       Label1.Text = frame
   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Timer1.Enabled = True
   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       Dim n As Integer = 0
       For Each img As Bitmap In bit
           img.Save("C:\Users\3bo0ody\Desktop\ima\ima" & n & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
           n += 1
       Next
   End Sub

الان سأشاهد النتيجة Smile

(28-10-19, 11:07 PM)3booody كتب : تفضل اخي هذه محاولتي

كود :
Dim screenshot As System.Drawing.Bitmap
   Dim bit As New List(Of Bitmap)
   Dim graph As Graphics
   Dim frame As Integer = 0
   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Bounds = Screen.PrimaryScreen.Bounds
       screenshot = New System.Drawing.Bitmap(Bounds.Width, Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
       graph = Graphics.FromImage(screenshot)
   End Sub

   Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
       If frame = 60 Then
           Timer1.Stop()
           Return
       End If
       graph.CopyFromScreen(Bounds.X, Bounds.Y, 0, 0, Bounds.Size, CopyPixelOperation.SourceCopy)
       bit.Add(screenshot)
       frame += 1
       Label1.Text = frame
   End Sub

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Timer1.Enabled = True
   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
       Dim n As Integer = 0
       For Each img As Bitmap In bit
           img.Save("C:\Users\3bo0ody\Desktop\ima\ima" & n & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
           n += 1
       Next
   End Sub


لقد قام بتكرار نفس الصورة 60 مرة  Sad
انا اعتقد انه يوجد امل 
هل من حل ؟
الرد
تم الشكر بواسطة: asemshahen5
#6
عذرآ اخي حاولت التعديل على كودك دون فهم الغاية الحقيقة ظننت فقط تريد حفظ الصور في وقت لاحق

هذا الكود يؤدي الغرض الذي تريد تفضل واكرر اعتذاري



كود :
Dim bit As New List(Of Bitmap)
   Dim frame As Integer = 0
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Do Until frame = 61
           Dim screenshot As New System.Drawing.Bitmap(Bounds.Width, Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
           Dim graph As Graphics = Graphics.FromImage(screenshot)
           Label1.Text = frame
           graph.CopyFromScreen(Bounds.X, Bounds.Y, 0, 0, Bounds.Size, CopyPixelOperation.SourceCopy)
           Application.DoEvents()
           frame += 1
           bit.Add(screenshot)
           graph.Dispose()
       Loop
       Dim n As Integer = 0
       For Each img As Bitmap In bit
           img.Save("C:\Users\3bo0ody\Desktop\ima\ima" & n & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
           n += 1
       Next
   End Sub

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Bounds = Screen.PrimaryScreen.Bounds
   End Sub

عدلت مرة اخرى وفقط زر بوتون واحد ماتحتاج اثنين
الرد
تم الشكر بواسطة: SnTnt , asemshahen5 , Rabeea Qbaha , Rabeea Qbaha , AbdoDabak , محمد كريّم
#7
Heart 
{~~3booody ~~}
هاذا ما كنت اريد !
شكرا لك جدا !
الرد
تم الشكر بواسطة: 3booody , asemshahen5
#8
عفوآ اخي

وقد لاحظت شي بسيط بالكود وهو اول فريم يتم التقاطه اسرع من الليبل لذلك فقط اعدت ترتيب الكود بهذا الشكل يعطيك نتيجة 100% ان شاء االله
تحياتي الك
وبالنسبة لأين تعلمت البرمجة فهي سبحان الله صارت عندي حب للبرمجة رغم انها ما اختصاصي بالدراسة لكن من سنوات وانا ابرمج والحمدلله


كود :
Dim bit As New List(Of Bitmap)
   Dim frame As Integer = 0
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Do Until frame = 61
           Label1.Text = frame
           Application.DoEvents()
           Dim screenshot As 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)
           frame += 1
           bit.Add(screenshot)
           graph.Dispose()
       Loop
       Dim n As Integer = 0
       For Each img As Bitmap In bit
           img.Save("C:\Users\3bo0ody\Desktop\ima\ima" & n & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
           n += 1
       Next
   End Sub

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Bounds = Screen.PrimaryScreen.Bounds
   End Sub
الرد
تم الشكر بواسطة: asemshahen5 , SnTnt , Rabeea Qbaha , AbdoDabak
#9
(29-10-19, 12:01 AM)3booody كتب : عفوآ اخي

وقد لاحظت شي بسيط بالكود وهو اول فريم يتم التقاطه اسرع من الليبل لذلك فقط اعدت ترتيب الكود بهذا الشكل يعطيك نتيجة 100% ان شاء االله
تحياتي الك
وبالنسبة لأين تعلمت البرمجة فهي سبحان الله صارت عندي حب للبرمجة رغم انها ما اختصاصي بالدراسة لكن من سنوات وانا ابرمج والحمدلله


كود :
Dim bit As New List(Of Bitmap)
   Dim frame As Integer = 0
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Do Until frame = 61
           Label1.Text = frame
           Application.DoEvents()
           Dim screenshot As 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)
           frame += 1
           bit.Add(screenshot)
           graph.Dispose()
       Loop
       Dim n As Integer = 0
       For Each img As Bitmap In bit
           img.Save("C:\Users\3bo0ody\Desktop\ima\ima" & n & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
           n += 1
       Next
   End Sub

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Bounds = Screen.PrimaryScreen.Bounds
   End Sub
لم الاحظ هاذا الخطا
لاكن النتيجة مشاء الله  Big Grin 
انا سعييد جدا  Smile 
لم اجد موضوع اجنبي يشرح هاذا الامر
الرد
تم الشكر بواسطة: 3booody , asemshahen5


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] تحديد مكان في صورة اللورد محمود 7 213 12-10-19, 03:36 AM
آخر رد: ميدو الفنان
  الرجاء المساعده فى عمل زر يقوم بتغيير صورة الفورم الى صورة اخرى من Resources على زهران 13 499 05-10-19, 12:16 PM
آخر رد: alshandodi
  كيف يمكنني التقاط صورة عن طريق حساس الأشعة X-Ray Sensor عند تعرض الأشعة عليه ؟ Alhootti1 0 77 03-10-19, 12:19 AM
آخر رد: Alhootti1
  كيفية نقل صورة الى ملف وورد الرائد 3 178 11-09-19, 06:45 PM
آخر رد: الرائد
  استفسار حول استرداد تاريخ ايام الاسبوع fuad_alshujaa 2 155 29-08-19, 11:10 PM
آخر رد: fuad_alshujaa
  [VB.NET] اريد التعديل ع كود للكتابه ع صورة e-coder 5 277 19-08-19, 12:47 AM
آخر رد: ابراهيم ايبو
  مشكله في ادراج صورة لقاعدة بيانات سيكول makky 13 502 09-08-19, 11:23 AM
آخر رد: makky
  جلب صورة البروفيل anes 7 385 06-08-19, 01:29 PM
آخر رد: bidaya
  [سؤال] كيف أنعش مربع الصورة بعد تدميرها لضرورة حذف صورة من مسار مربوط بها سعود 2 213 25-07-19, 07:16 AM
آخر رد: حريف برمجة
  كود لرفع صورة على الفيس بوك ابو روضة 7 324 23-07-19, 01:08 AM
آخر رد: ابو روضة

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


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