تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مقال- الصور المتحركة في الدوت نت Animation
#1
كاتب الموضوع : silverlight

الصور المتحركة في الدوت نت Animation
اللغة المستخدمة: الفيجوال بيسك
التطبيق: فيجوال استوديو 2005 و 2008
المستوي: التقييم متروك للقارئ
إعداد: مهندس / عمر أمين إبراهيم

ماذا تعني كلمة Animation

كما تعلمون الكلمة تعريفها ومفهومها بسيط جدا وهي تعني استخدام بعض الصور المرسومة في 2D بتسلسل معين لتخليق أو لصناعة حركة وهمية وبالتالي يشعر المستخدم أن الصورة تتحرك

من أشهر الملفات المستخدمة في تحريك الصور هي الملفات التي لها امتداد GIF وأيضا بعض الملفات الشهيرة الأخري وهي التي تستخدم في الفيديو تحديدا وهي MPEG و AVI

أيضا وكما تعلمون هناك الكثير من البرامج الجاهزة التي من الممكن استخدامها في صناعة ملفات لصور متحركة ومنها مثلا Windows Movie Maker وهو برنامج موجود مع نظام التشغيل في الويندوز ويمكن استخدامه لصناعة أفلام فيديو بسيطة مثلا أيضا يوجد برنامج أخر يستخدم في صناعة ملفات GIF وهو PhotoImpact GIF Animator وهناك الكثير والكثير من البرامج التي تتعامل مع Image Editing وأيضا Video Editing

كيف نقوم بعرض صور متحركة داخل برامجنا

أعتقد أسهل الطرق هي أن يكون لدينا صورة متحركة جاهزة امتدادها من النوع GIF ومصممه بأي من البرامج الجاهزة ثم نضيف للفورم PictureBox ثم ببساطة نضيف هذا الصورة الي الصفة PictureBox.Image وينتهي الأمر بسهولة وبالتالي يصبح لدينا صورة متحركة يمكن استخدامها في برامجنا

لكن كيف نفعل ذلك برمجيا؟ أو كيف نضيف صورة متحركة للفورم مثلا أو لأي كونترول أخر إن أردنا ذلك؟
هذا ما سوف نتحدث عنه هنا وهذا هو الهدف من هذا المقال

في واقع الأمر يمكننا أن نفعل ذلك باستخدام +GDI إذن كما تلاحظون أن +GDI هي كلمة السر أو المفتاح للكثير من الأشياء مثل تغيير شكل الكونترول أو تغيير شكل الفورم أو بناء الصور والتعامل معها الي أخره من الأشياء
لذلك إن دراسة وفهم +GDI شئ هام جدا لأي مبرمج.

تعلم +GDI عزيزي القارئ أضمن لك أن تكون مبرمجا رائعا

الأن لنتحدث عن كيفية صناعة صورة متحركة في الدوت نت وتحديدا باستخدام الفيجوال بيسك دوت نت

المثال الأول:

أولا: لنفتح مشروعا جديدا ونطلق عليه أي اسم وليكن علي سبيل المثال AnimationExample1

ثانيا: نضيف Timer الي الفورم رقم 1

ثالثا: نضيف للمشروع بعض الصور ليس شرطا أن تكون صور متشابه أو نضيف صورا متسلسلة حسب رغبتنا
ولكن أهم شئ أن تكون أبعاد الصور التي يتم إضافتها للمشروع متساوية الأبعاد أي تكون جميع الصور لها نفس الأبعاد من حيث الطول والعرض ويتم إضافة الصور الي Resources الخاصة بالمشروع

رابعا: نقوم بتعريف متغيران فقط لا غير.
المتغير الأول عبارة عن مصفوفة ArrayList وسوف تستخدم هذه المصفوفة كمخزن لجميع الصور
والمتغير الثاني عبارة عن Integer وهو سيكون بمثابة عداد نحدد به رقم الصورة داخل المصفوفة

خامسا: في الحدث Load الخاص بالفورم Form1 نقوم بإضافة جميع الصور الموجودة في Resources إلي المصفوفة وأيضا نقوم بجعل Timer1.Enabled = True أي نقوم بتشغيل التايمز

سادسا: في الحدث Tick الخاص بالتايمر Timer1 نقوم بإعطاء قيم للمتغير الرقمي ثم نقوم بإضافة الصور الي الفورم Background كما هو موضح بالكود التالي


كود :
Public Class Form1

Private m_Images As ArrayList = New ArrayList()
Private m_Count As Integer = 1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

m_Images.Add(My.Resources._04_001_0001)
m_Images.Add(My.Resources._04_001_0002)
m_Images.Add(My.Resources._04_001_0003)
m_Images.Add(My.Resources._04_001_0004)
m_Images.Add(My.Resources._04_001_0005)

Timer1.Enabled = True

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

m_Count = (m_Count + 1) Mod 5
Me.BackgroundImage = CType(m_Images(m_Count), Image)
End Sub

End Class

الأن نقوم بتشغيل المشروع سنجد أن الصور تتحرك داخل الفور وبذلك نكون قد صممنا صورة متحركة وأضفناها للفورم.

أعتقد أن الفكرة سهلة جدا لكن ليست إحترافية علي سبيل المثال جرب تكبر الفورم أثناء تشغيل البرنامج ستلاحظ أن الصورة المتحركة موجودة بأكثر من مكان داخل الفورم

السبب أن الفورم له صفه هي BackgroundImageLayout وعندما نذهب الي النافذة الخاصة بصفات الفورم سنجد أن القيمة الافتراضية لهذه الصفة Tile جرب مثلا تغير هذه القيمة إما عن طريق نافذة Properties أو أن تكتب ذلك عن طريق الكود مثلا لنجعل قيمة هذه الخاصية Stretch أو Center أو Zoom ستجد أن الصورة تظهر مهتزة وليست احترافية والسبب أن هناك Flickering يحدث أثناء تغيير الصورة في خلفية البرنامج وقت التشغيل لذلك هنا علينا أيضا أن نقوم بتغيير قيمة خاصية في الفورم وهي DoubleBuffered ونجعل قيمتها True لكي نقلل من Flickering أثناء تشغيل البرنامج

نجرب ونشغل المشروع سنجد أن كل شئ تقريبا تمام لكن هل من المنطقي أن نضع الصور المتحركة في خلفية الفورم طبعا أكيد مرفوض هذا الاختيار من الأفضل طبعا أن نستخدم مثلا PictureBox وهذا ما سوف نوضحه في المثال التالي والكود لن يتغير كثيرا عن الفكرة الموجودة بالمثال الأول

المثال الثاني:

أولا: نضيف فورم أخر الي المشروع وننفذ عليه الخطوات التالية

ثانيا: نضيف Timer و أيضا PictureBox الي الفورم رقم 2

ثالثا: نقوم بتعريف متغيران فقط لا غير.
المتغير الأول عبارة عن مصفوفة ArrayList وسوف تستخدم هذه المصفوفة كمخزن لجميع الصور
والمتغير الثاني عبارة عن Integer وهو سيكون بمثابة عداد نحدد به رقم الصورة داخل المصفوفة

رابعا: في الحدث Load الخاص بالفورم Form2 نقوم بإضافة جميع الصور الموجودة في Resources إلي المصفوفة وأيضا نقوم بجعل Timer1.Enabled = True أي نقوم بتشغيل التايمز وأيضا سنضيف بعض الكود لكي نحدد بعض صفات PictureBox1 مثل خاصية Image وخاصية Size بأبعاد الصورة

خامسا: في الحدث Tick الخاص بالتايمر Timer1 نقوم بإعطاء قيم للمتغير الرقمي ثم نقوم بإضافة الصور الي PictureBox1 كما هو موضح بالكود التالي



كود :
Public Class Form2

Private m_Images As ArrayList = New ArrayList()
Private m_Count As Integer = 1

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

m_Images.Add(My.Resources._04_001_0001)
m_Images.Add(My.Resources._04_001_0002)
m_Images.Add(My.Resources._04_001_0003)
m_Images.Add(My.Resources._04_001_0004)
m_Images.Add(My.Resources._04_001_0005)

PictureBox1.Image = My.Resources._04_001_0001
PictureBox1.Size = PictureBox1.Image.Size
Timer1.Enabled = True

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

m_Count = (m_Count + 1) Mod 5
PictureBox1.Image = CType(m_Images(m_Count), Image)
End Sub

End Class

الأن علينا أن نقوم بتجربة الفورم رقم 2 سنلاحظ أن كل شئ تمام وحتى لو قمنا بتغيير أبعاد الفورم فإن ذلك لن يؤثر علي أداء الصورة المتحركة نهائيا
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
مقال- الصور المتحركة في الدوت نت Animation - بواسطة Raggi Tech - 02-10-12, 06:40 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Video [درس فيديو] تقارير الكريستال ريبورت وتغيير مسار الصور أثناء التشغيل رمضان272 0 1,999 28-03-22, 03:18 AM
آخر رد: رمضان272
  شرح خوارزميات معالجة الصور (من دروس الاستاذ فوزي برزنجي) ناديه الشجيري 19 35,513 20-02-22, 02:13 PM
آخر رد: رضوان الجماعي
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 6,340 30-07-21, 05:14 PM
آخر رد: kebboud
  مقال: الكومبو بوكس ComboBox كيف تضيف أيقونات Blue Sky 1 3,449 30-06-19, 10:41 AM
آخر رد: invocker
  Compare Images المقارنة بين الصور Abu Ehab 0 3,641 31-10-18, 04:27 PM
آخر رد: Abu Ehab
  التــعامل مع cmd من خلال الدوت نت مبتدئ في الاحتراف 3 4,037 02-06-18, 12:36 AM
آخر رد: YousefOkasha
  مقدمة إلي ضغط الصور ..... Zip Bitmap silverlight 0 2,598 10-05-18, 04:35 AM
آخر رد: silverlight
  Text Animation silverlight 1 2,297 26-10-17, 02:04 PM
آخر رد: sendbad100
  تفقيط الارقام فى الدوت نت مبرمج أوتار 17 13,410 20-04-17, 12:21 PM
آخر رد: محمد بوقزاحة
  مشروع لجلب الصور من الماسحة الضوئية (Scanner) m.sami.ak 14 12,914 22-01-17, 10:41 AM
آخر رد: amko

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


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