المشاركات : 67
المواضيع 10
الإنتساب : Sep 2018
السمعة :
7
الشكر: 52
تم شكره 138 مرات في 63 مشاركات
28-10-19, 10:18 PM
(آخر تعديل لهذه المشاركة : 28-10-19, 10:19 PM {2} بواسطة SnTnt.)
السلام عليكم ورحمة الله وبركاته :
احاول عمل برنامج يقوم بتصوير 60 صورة في الثانية او اكثر
اضفت كود يخبرني كم فريم صور
كان يوصل الى فريمات عالية لاكن الصور غير متناسقة مع بعض
يعني الصورة مو ماشية بتسلسل منطقي
فيما بعد اكتشفت ان الكود الذي يقوم بي الحفظ
قد جعل البرنامج يأخذ وقت من اجزاء الثانية يعني بهاذا الشكل
التقاط الصورة
حفظ الصورة
التقاط الصورة
حفظ الصورة
لاحظ ان حفظ الصورة قد اخذ وقت من البرنامج وقد ضيع بعض الصور
عندما قمت بأزالة كود الحفظ استطعت الحصول على الفريمات الصحيحة
لاكن عندما اعدت الكود اكتشفت ان الفريمات لم تكن حقيقية
هل يمكنكم مساعدتي لجعله كهاذا
التقاط الصورة
التقاط الصورة
التقاط الصورة
حفظ الصور
انتظر الرد ...
المشاركات : 664
المواضيع 32
الإنتساب : Oct 2013
السمعة :
81
الشكر: 776
تم شكره 992 مرات في 298 مشاركات
وعليكم السلام ورحمة الله وبركاته
اخي الفاضل ارنا محاولتك اولآ لكي نفهم طلبك اكثر ونتمكن من مساعدتك في ايجاد المشكلة ان شاء الله
المشاركات : 67
المواضيع 10
الإنتساب : Sep 2018
السمعة :
7
الشكر: 52
تم شكره 138 مرات في 63 مشاركات
28-10-19, 10:38 PM
(آخر تعديل لهذه المشاركة : 28-10-19, 10:40 PM {2} بواسطة SnTnt.)
(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)
اذا ازلت هاذا الكود يقوم بفعل المطلوب ولا يوجد تـأخير بين الصورة الاولى و الثانية
المشاركات : 664
المواضيع 32
الإنتساب : Oct 2013
السمعة :
81
الشكر: 776
تم شكره 992 مرات في 298 مشاركات
تفضل اخي هذه محاولتي
كود :
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
المشاركات : 67
المواضيع 10
الإنتساب : Sep 2018
السمعة :
7
الشكر: 52
تم شكره 138 مرات في 63 مشاركات
28-10-19, 11:26 PM
(آخر تعديل لهذه المشاركة : 28-10-19, 11:37 PM {2} بواسطة SnTnt.)
(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 مرة
انا اعتقد انه يوجد امل
هل من حل ؟
المشاركات : 664
المواضيع 32
الإنتساب : Oct 2013
السمعة :
81
الشكر: 776
تم شكره 992 مرات في 298 مشاركات
28-10-19, 11:37 PM
(آخر تعديل لهذه المشاركة : 28-10-19, 11:44 PM {2} بواسطة 3booody.)
عذرآ اخي حاولت التعديل على كودك دون فهم الغاية الحقيقة ظننت فقط تريد حفظ الصور في وقت لاحق
هذا الكود يؤدي الغرض الذي تريد تفضل واكرر اعتذاري
كود :
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
عدلت مرة اخرى وفقط زر بوتون واحد ماتحتاج اثنين
المشاركات : 67
المواضيع 10
الإنتساب : Sep 2018
السمعة :
7
الشكر: 52
تم شكره 138 مرات في 63 مشاركات
28-10-19, 11:41 PM
(آخر تعديل لهذه المشاركة : 28-10-19, 11:59 PM {2} بواسطة SnTnt.)
{~~3booody ~~}
هاذا ما كنت اريد !
شكرا لك جدا !
المشاركات : 664
المواضيع 32
الإنتساب : Oct 2013
السمعة :
81
الشكر: 776
تم شكره 992 مرات في 298 مشاركات
عفوآ اخي
وقد لاحظت شي بسيط بالكود وهو اول فريم يتم التقاطه اسرع من الليبل لذلك فقط اعدت ترتيب الكود بهذا الشكل يعطيك نتيجة 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
المشاركات : 67
المواضيع 10
الإنتساب : Sep 2018
السمعة :
7
الشكر: 52
تم شكره 138 مرات في 63 مشاركات
29-10-19, 12:04 AM
(آخر تعديل لهذه المشاركة : 29-10-19, 12:07 AM {2} بواسطة SnTnt.)
(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
لم الاحظ هاذا الخطا
لاكن النتيجة مشاء الله
انا سعييد جدا
لم اجد موضوع اجنبي يشرح هاذا الامر
|