ثلاثة ايام من المحاولة , >الفاشلة< : كود تصوير 60 صورة في الثانية - SnTnt - 28-10-19
السلام عليكم ورحمة الله وبركاته :
احاول عمل برنامج يقوم بتصوير 60 صورة في الثانية او اكثر
اضفت كود يخبرني كم فريم صور
كان يوصل الى فريمات عالية لاكن الصور غير متناسقة مع بعض
يعني الصورة مو ماشية بتسلسل منطقي
فيما بعد اكتشفت ان الكود الذي يقوم بي الحفظ
قد جعل البرنامج يأخذ وقت من اجزاء الثانية يعني بهاذا الشكل
التقاط الصورة
حفظ الصورة
التقاط الصورة
حفظ الصورة
لاحظ ان حفظ الصورة قد اخذ وقت من البرنامج وقد ضيع بعض الصور
عندما قمت بأزالة كود الحفظ استطعت الحصول على الفريمات الصحيحة
لاكن عندما اعدت الكود اكتشفت ان الفريمات لم تكن حقيقية
هل يمكنكم مساعدتي لجعله كهاذا
التقاط الصورة
التقاط الصورة
التقاط الصورة
حفظ الصور
انتظر الرد ...
RE: ثلاثة ايام من المحاولة , >الفاشلة< : كود تصوير 60 صورة في الثانية - 3booody - 28-10-19
وعليكم السلام ورحمة الله وبركاته
اخي الفاضل ارنا محاولتك اولآ لكي نفهم طلبك اكثر ونتمكن من مساعدتك في ايجاد المشكلة ان شاء الله
RE: ثلاثة ايام من المحاولة , >الفاشلة< : كود تصوير 60 صورة في الثانية - SnTnt - 28-10-19
(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)
اذا ازلت هاذا الكود يقوم بفعل المطلوب ولا يوجد تـأخير بين الصورة الاولى و الثانية
RE: ثلاثة ايام من المحاولة , >الفاشلة< : كود تصوير 60 صورة في الثانية - 3booody - 28-10-19
تفضل اخي هذه محاولتي
كود :
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
RE: ثلاثة ايام من المحاولة , >الفاشلة< : كود تصوير 60 صورة في الثانية - SnTnt - 28-10-19
(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
الان سأشاهد النتيجة
(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 مرة
انا اعتقد انه يوجد امل
هل من حل ؟
RE: ثلاثة ايام من المحاولة , >الفاشلة< : كود تصوير 60 صورة في الثانية - 3booody - 28-10-19
عذرآ اخي حاولت التعديل على كودك دون فهم الغاية الحقيقة ظننت فقط تريد حفظ الصور في وقت لاحق
هذا الكود يؤدي الغرض الذي تريد تفضل واكرر اعتذاري
كود :
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
عدلت مرة اخرى وفقط زر بوتون واحد ماتحتاج اثنين
RE: ثلاثة ايام من المحاولة , >الفاشلة< : كود تصوير 60 صورة في الثانية - SnTnt - 28-10-19
{~~3booody ~~}
هاذا ما كنت اريد !
شكرا لك جدا !
RE: ثلاثة ايام من المحاولة , >الفاشلة< : كود تصوير 60 صورة في الثانية - 3booody - 29-10-19
عفوآ اخي
وقد لاحظت شي بسيط بالكود وهو اول فريم يتم التقاطه اسرع من الليبل لذلك فقط اعدت ترتيب الكود بهذا الشكل يعطيك نتيجة 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
RE: ثلاثة ايام من المحاولة , >الفاشلة< : كود تصوير 60 صورة في الثانية - SnTnt - 29-10-19
(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
لم الاحظ هاذا الخطا
لاكن النتيجة مشاء الله
انا سعييد جدا
لم اجد موضوع اجنبي يشرح هاذا الامر
|