السلام عليكم ورحمة الله وبركاته :
احاول عمل برنامج يقوم بتصوير 60 صورة في الثانية او اكثر
اضفت كود يخبرني كم فريم صور
كان يوصل الى فريمات عالية لاكن الصور غير متناسقة مع بعض
يعني الصورة مو ماشية بتسلسل منطقي
فيما بعد اكتشفت ان الكود الذي يقوم بي الحفظ
قد جعل البرنامج يأخذ وقت من اجزاء الثانية يعني بهاذا الشكل
التقاط الصورة
حفظ الصورة
التقاط الصورة
حفظ الصورة
لاحظ ان حفظ الصورة قد اخذ وقت من البرنامج وقد ضيع بعض الصور
عندما قمت بأزالة كود الحفظ استطعت الحصول على الفريمات الصحيحة
لاكن عندما اعدت الكود اكتشفت ان الفريمات لم تكن حقيقية
هل يمكنكم مساعدتي لجعله كهاذا
التقاط الصورة
التقاط الصورة
التقاط الصورة
حفظ الصور
انتظر الرد ...
وعليكم السلام ورحمة الله وبركاته
اخي الفاضل ارنا محاولتك اولآ لكي نفهم طلبك اكثر ونتمكن من مساعدتك في ايجاد المشكلة ان شاء الله
(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)
اذا ازلت هاذا الكود يقوم بفعل المطلوب ولا يوجد تـأخير بين الصورة الاولى و الثانية
عذرآ اخي حاولت التعديل على كودك دون فهم الغاية الحقيقة ظننت فقط تريد حفظ الصور في وقت لاحق
هذا الكود يؤدي الغرض الذي تريد تفضل واكرر اعتذاري
كود :
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
عدلت مرة اخرى وفقط زر بوتون واحد ماتحتاج اثنين
عفوآ اخي
وقد لاحظت شي بسيط بالكود وهو اول فريم يتم التقاطه اسرع من الليبل لذلك فقط اعدت ترتيب الكود بهذا الشكل يعطيك نتيجة 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
(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
لم الاحظ هاذا الخطا
لاكن النتيجة مشاء الله
انا سعييد جدا
لم اجد موضوع اجنبي يشرح هاذا الامر