تقييم الموضوع :
  • 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 , Ayman abdullah , Ayman abdullah
#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 , Ayman abdullah


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  مشكلة فى Radiobutton عند وضع صورة فيه أبو جودة 3 73 أمس, 04:31 AM
آخر رد: Taha Okla
  تعديل كود ارسال صورة الى الواتس new_programer 2 166 21-03-24, 10:07 PM
آخر رد: new_programer
  [سؤال] حول ظهور النافذة الاولى عند الضغط على Menustrip2 في النافذة الثانية vb.net 2012 mh66 0 245 19-10-23, 09:05 AM
آخر رد: mh66
  [VB.NET] حساب ايام اجازة بدون ايام الجمعة والسبت وعطلات البلد ahmed_king2023 0 457 05-06-23, 03:48 PM
آخر رد: ahmed_king2023
  إضافة عمودين للداتاجريد قبل نشر ايام الشهر محمد خيري 0 261 15-12-22, 11:28 PM
آخر رد: محمد خيري
  المرحلة الثانية من الفاتورة الالكترونية malsofi 0 783 03-11-22, 11:56 AM
آخر رد: malsofi
  الفاتوره الاكترونيه للمرحله الثانية الربط Kit909 6 1,632 29-10-22, 09:19 PM
آخر رد: Marayrezdh
  [سؤال] الاخوة في السعودية حد يشرح الفاتورة الإلكترونية للمرحلة الثانية 2 Doby 1 710 26-10-22, 02:52 AM
آخر رد: AmrSobhy
  تطبيق المرحلة الثانية لهيئة الزكاة والضريبة والدخل السعودية yassoo1985 4 1,436 25-10-22, 01:15 AM
آخر رد: Taha Okla
  [VB.NET] طلب كود حساب عدد ايام الجمعة في كل شهر moftah70 2 656 23-10-22, 05:06 PM
آخر رد: moftah70

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


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