منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : تدوير صورة حول مركزها باستخدام gdi+
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
كاتب الموضوع : حسام برهان


البرنامج بسيط جداً، وهو موجود بكامله ضمن الحدث Paint لأداة PictureBox على الشكل التالي:


كود :
Private Sub picShow_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles picShow.Paint
Dim img As Image
Dim pt As Point

img = New Bitmap("myimage.jpg")
pt = New Point(picShow.Width / 2, picShow.Height / 2)

'Set world transform of graphics object to translate.
e.Graphics.TranslateTransform(pt.X, pt.Y)


'Then to rotate, prepending rotation matrix.
e.Graphics.RotateTransform(angle)

pt = New Point(-img.Width / 2, -img.Height / 2)
e.Graphics.DrawImage(img, pt)

End Sub
يمكننا باستخدام الطريقة TranslateTransform() إعادة تعيين نقطة الأصل (مبدأ الاحداثيات) للأداة، حيث من المعلوم أن نقطة الأصل لأي أداة تكون في الزاوية اليسرى العليا منها، في مثالنا هذا ستكون نقطة الأصل للأداة في منتصفها.

ثم نحدد زاوية الدوران باستخدام الطريقة RotateTransform() والزاوية مُعطاة بالدرجات، بحيث تكون جهة الدوران بجهة دوران عقارب الساعة.

أخيراً نرسم الصورة على الأداة باستخدام الطريقة DrawImage() التي تحتاج (في أحد أشكالها) إلى وسيطين: الأول هو كائن الصورة المراد رسمها، والثاني إحداثيات الزاوية اليسرى العليا للصورة، والتي ستكون في حالتنا هذه ذات قيم سالبة لكي نجعل نقطة الأصل منطبقة على مركز الصورة.

بمجرد رسم الصورة ستُدوَّر بالزاوية angle (متغير معرف على أنه private).

انظر الملف هنا لمثال على هذا الأمر.