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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] كيف يتم حفظ صورة في datagridiew غير متصل بقاعدة البيانات rochdi191 5 153 14-05-20, 08:30 PM
آخر رد: rochdi191
  [VB.NET] اضافة صورة فارغة لقاعدة البيانات محمد اسماعيل 8 838 02-05-20, 11:32 AM
آخر رد: عبدالله الدوسري
  [سؤال] سحب صورة من السكانر ؟ Mido9 12 10,155 22-04-20, 12:45 AM
آخر رد: Narutogoo
  اظهار صورة ملتقطة من webcam في DATAGRIDVIEW nasro.betz 3 277 05-03-20, 09:05 PM
آخر رد: nasro.betz
  [نقاش] مشكلة في اضافة صورة في قاعدة البيانات اكسس mazentq 15 496 02-03-20, 11:43 PM
آخر رد: alsalamoni
  كود حفظ صورة في قاعدة البيانات sql aldery 10 374 23-02-20, 12:53 AM
آخر رد: alsalamoni
  حفظ صورة علي الجهاز متخزنة في قاعدة البيانات BIT (تم حل المشكلة) محمدالزند 1 186 07-02-20, 04:01 AM
آخر رد: محمدالزند
  سؤال حول إستخراج نوع صورة فقط بدون الإسم : مثال (JPG.) Al Wilaya 3 353 02-02-20, 05:49 PM
آخر رد: alsalamoni
  [VB.NET] محتاج مساعدة في اضافة حقل جديدة من نوع صورة محمدالزند 0 178 17-01-20, 03:28 PM
آخر رد: محمدالزند
  [VB.NET] كيف اضيف file او صورة من الريسورس الي Byte farfour 0 149 07-01-20, 07:12 AM
آخر رد: farfour

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


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