02-10-12, 06:42 PM
كيف نرسم داخل صورة متحركة؟
يتبقي شئ أخير سنقوم بتنفيذه وهو مرتبط بسؤال سألته احدي الأخوات بالمنتدى السؤال كان كالأتي
كيف أضيف Label شفاف الي الصورة الموجودة في PictureBox في الواقع وبعد إجابتها علي سؤالها تفضلت الأخت وسألت مرة ثانية ماذا لو كانت الصورة صورة متحركة............تحديدا المقطع الثاني من السؤال هو ما أريد التركيز عليه وهو كيف نرسم داخل صورة متحركة
لهذا سنقوم بتوضيح إجابة السؤال لكي نستفيد جميعا معا و لذلك سوف أضيف فورم جديد للمثال السابق وثم أضيف الكود الموجود أدناه ولقد قمت بشرح كل خطو تقريبا داخل الكود لكي يتضح الأمر تماما و الفارق فقط بين هذا الكود والكود السابق أنني قمت برسم الصورة المتحركة داخل PictureBox أضفتها الي الفورم رقم 2 وأعتقد الشرح الموجود داخل الكود لكل سطر كاف جدا لذا لسنا في حاجه الي تكرار كتابته مرة ثانية وهذا الشرح أيضا يغطي بعض النقاط الموجودة بالمثال الخامس
المثال السادس:
أتمني أن يكون الموضوع مفيدا
و ستجدون بالمرفقات جميع الملفات التي تغطي الموضوع كاملا ولكن بنسخة الفيجوال استوديو 2008 فقط أعتذر لانني لم لا استطيع أن ارفعها بنسخة 2005 حيث انني لم أعد استخدم نسخة الفيجوال 2005 بسبب مساكلها الكثيرة
أعتقد من الممكن الأن ان يفكر البعض منكم بتصميم برامج لتحريك الصور فالأمر كما ترون سهل جدا وهو يعتمد غالبا علي معظم الأفكار التي قمنا بتغطيتها في هذا المقال
ومن يريد أي مساعدة إضافية في هذا الموضوع يمكنه أن يسال وثق تماما عزيزي القارئ أننا نتعلم منك ومن أسئلتك قبل ان تتعلم منا
بالتوفيق لكم جميعا
أخوكم عمر
يتبقي شئ أخير سنقوم بتنفيذه وهو مرتبط بسؤال سألته احدي الأخوات بالمنتدى السؤال كان كالأتي
كيف أضيف Label شفاف الي الصورة الموجودة في PictureBox في الواقع وبعد إجابتها علي سؤالها تفضلت الأخت وسألت مرة ثانية ماذا لو كانت الصورة صورة متحركة............تحديدا المقطع الثاني من السؤال هو ما أريد التركيز عليه وهو كيف نرسم داخل صورة متحركة
لهذا سنقوم بتوضيح إجابة السؤال لكي نستفيد جميعا معا و لذلك سوف أضيف فورم جديد للمثال السابق وثم أضيف الكود الموجود أدناه ولقد قمت بشرح كل خطو تقريبا داخل الكود لكي يتضح الأمر تماما و الفارق فقط بين هذا الكود والكود السابق أنني قمت برسم الصورة المتحركة داخل PictureBox أضفتها الي الفورم رقم 2 وأعتقد الشرح الموجود داخل الكود لكل سطر كاف جدا لذا لسنا في حاجه الي تكرار كتابته مرة ثانية وهذا الشرح أيضا يغطي بعض النقاط الموجودة بالمثال الخامس
المثال السادس:
كود :
Public Class Form2
Dim AnimatedImage As Bitmap = My.Resources.Mohd_01
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' نقوم بتغير بعض الصفات للبكتشر بوكس
PictureBox1.Location = New Point(0, 0)
PictureBox1.Size = New Size(200, 200)
PictureBox1.BorderStyle = BorderStyle.Fixed3D
PictureBox1.BackColor = Color.Yellow
' استخدام جملة شرطية لتحديد اذا كانت الصورة متحركه أم لا
If ImageAnimator.CanAnimate(AnimatedImage) Then
' تحريك الصورة باستخدام الكلاس
' ImageAnimator
' مع إضافة EventHandler يشير الي
' Form Resize event
' حيث هناك يتم استخدام PictureBox1.Inavlaidte
' لإجبار البكتشر بوكس علي اعادة رسم نفسه
ImageAnimator.Animate(AnimatedImage, New EventHandler(AddressOf Form2_Resize))
Else
' مجرد رسالة تظهر في حالة اذا كانت الصورة المستخدمة صوره غير متحركه مثلا
' وهذا الاسلوب يستخدم غالبا في حالة اذا اعطينا المستخدم حرية اختيار الصورة مثلا
' وبالتالي لو حدث خطأ عند اختيار نوع الصورة يقوم البرنامج بإظهار مثل هذه الرسالة ثم يقوم بتنفيذ
' الكود الذي يلي الرسالة
MessageBox.Show("Exit Application....", "Error", MessageBoxButtons.OK, MessageBoxIcon.Information)
Application.Exit()
End If
End Sub
Private Sub Form2_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
' لإجبار البكتشر بوكس علي اعادة رسم نفسه
PictureBox1.Invalidate()
End Sub
Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
' تعريف الفونت الذي سوف نستخدمه في رسم التكست داخل الصورة المتحركة
Dim m_font As New Font("Times New Roman", 20)
' نستخدم الكلاس ImageAnimator
' ونقوم بعمل UpdateFrames
' للصورة المتحركة
ImageAnimator.UpdateFrames(AnimatedImage)
' نقوم بتعريف أبعاد المستطيل الذي سنرسم الصورة بداخلة وهنا قمت بتحديد قيمته بناء علي ابعاد البكتشر بوكس
' من الممكن طبعا تغيير ابعاد المستطيل حسبما نريد علي سبيل المثال نجعله كالتالي
'Dim m_rect As Rectangle = New Rectangle(0, 0, 100, 100)
' لو نظرنا الي الصورة المستخدمة سنلاحظ أن أبعدها اكبر من أبعاد البكتشر بوكس المستخدم
Dim m_rect As Rectangle = PictureBox1.ClientRectangle
' هذا السطر من الكود يقوم برسم الصورة المتحركة داخل المستطيل
e.Graphics.DrawImage(AnimatedImage, m_rect)
' هذا السطر من الكود يقوم برسم التكست داخل الصورة المتحركة باستخدام الفونت الذي حددناه
' ويتم الرسم في نقطة معينه داخل البكتشر بوكس وهي النقطة المحدده قيمتها في اتجاه المحور الافقي = 20
' وفي اتجاه المحور الراسي = 20
' من الممكن تغير قيم هذه النقط طبقا لما نريد
e.Graphics.DrawString(" اللـــــــــه أكبر", m_font, Brushes.Black, 20, 20)
m_font.Dispose()
End Sub
End Classو ستجدون بالمرفقات جميع الملفات التي تغطي الموضوع كاملا ولكن بنسخة الفيجوال استوديو 2008 فقط أعتذر لانني لم لا استطيع أن ارفعها بنسخة 2005 حيث انني لم أعد استخدم نسخة الفيجوال 2005 بسبب مساكلها الكثيرة
أعتقد من الممكن الأن ان يفكر البعض منكم بتصميم برامج لتحريك الصور فالأمر كما ترون سهل جدا وهو يعتمد غالبا علي معظم الأفكار التي قمنا بتغطيتها في هذا المقال
ومن يريد أي مساعدة إضافية في هذا الموضوع يمكنه أن يسال وثق تماما عزيزي القارئ أننا نتعلم منك ومن أسئلتك قبل ان تتعلم منا
بالتوفيق لكم جميعا
أخوكم عمر
