تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - الجزء الخامس
#1
كاتب الموضوع : silverlight

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

الجزء الخامس: كيف نقوم بعمل Rotate للصورة

الهدف هنا هو إعادة رسم الصورة بحيث تعطي انطباع للمستخدم أن الصورة قد حدث لها دوران في اتجاه عقارب الساعة أو في عكس عقارب الساعة والفكرة مبنية علي أن Bitmap Class يوجد به بعض الطرق Methods وهي بالتحديد GetPixel وSetPixel وباستخدامهما معا نستطيع الحصول علي ألوان البكسل بالصورة أو نعيد ترتيب ألوان البكسل بالصورة وسنري كلما تقدمنا في قراءة االجزاء الخاصة بنفس الموضوع أهمية هاتان الطريقتان

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


كود :
Public Class Form1

Dim bmp As Bitmap = New Bitmap(My.Resources.body1)

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

PictureBox1.Image = bmp
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

' دوران للصورة في اتجاه عقارب الساعة
Dim OrigainalBitmap As New Bitmap(PictureBox1.Image)
Dim bmpWidth As Integer = OrigainalBitmap.Width
Dim bmpHeight As Integer = OrigainalBitmap.Height

Dim RotatedBitmap As New Bitmap(bmpHeight, bmpWidth, OrigainalBitmap.PixelFormat)

For X As Integer = 0 To bmpWidth - 1
For Y As Integer = 0 To bmpHeight - 1
RotatedBitmap.SetPixel(bmpHeight - Y - 1, X, OrigainalBitmap.GetPixel(X, Y))
Next Y
Next X

PictureBox1.Image = RotatedBitmap

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

' دوران للصورة في عكس عقارب الساعة
Dim OrigainalBitmap As New Bitmap(PictureBox1.Image)
Dim bmpWidth As Integer = OrigainalBitmap.Width
Dim bmpHeight As Integer = OrigainalBitmap.Height

Dim RotatedBitmap As New Bitmap(bmpHeight, bmpWidth, OrigainalBitmap.PixelFormat)

For X As Integer = 0 To bmpWidth - 1
For Y As Integer = 0 To bmpHeight - 1
RotatedBitmap.SetPixel(Y, bmpWidth - X - 1, OrigainalBitmap.GetPixel(X, Y))
Next Y
Next X

PictureBox1.Image = RotatedBitmap

End Sub

End Class
والمثال التالي يعطي فكرة أخري عن كيفية استخدام الكود أعلا ه بشكل أخر
افتح مشروع وأضف الي الفورم PictureBox و Timer حيث هنا سنجعل الصورة يحدث لها Rotation مع Timer


كود :
Public Class Form1

Dim bmp As Bitmap = New Bitmap(My.Resources.body1)

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

PictureBox1.Image = bmp
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage
Timer1.Interval = 250
Timer1.Enabled = True

End Sub

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

Dim OrigainalBitmap As New Bitmap(PictureBox1.Image)
Dim bmpWidth As Integer = OrigainalBitmap.Width
Dim bmpHeight As Integer = OrigainalBitmap.Height

Dim RotatedBitmap As New Bitmap(bmpHeight, bmpWidth, OrigainalBitmap.PixelFormat)

For X As Integer = 0 To bmpWidth - 1
For Y As Integer = 0 To bmpHeight - 1
RotatedBitmap.SetPixel(Y, bmpWidth - X - 1, OrigainalBitmap.GetPixel(X, Y))
Next Y
Next X

PictureBox1.Image = RotatedBitmap
End Sub

End Class
الأن لنبني دالتان Functions من الكود السابق حيث يمكن تختص احدهما بعمل دوران للصورة في اتجاه عقارب الساعة Clockwise والثانية تقوم بالعكس أي Anticlockwise
الدالة الأولي سنطلق عليها RotateImageClockwise والدالة الثانية سنطلق عليها RotateImageAntiClockwise وسيكون شكل الكود لهاتان الدالتان كالتالي


كود :
Public Shared Function RotateClockwise(ByVal bmp As Bitmap) As Bitmap

Dim bmpWidth As Integer = bmp.Width
Dim bmpHeight As Integer = bmp.Height

Dim RotatedBitmap As New Bitmap(bmpHeight, bmpWidth)

For X As Integer = 0 To bmpWidth - 1
For Y As Integer = 0 To bmpHeight - 1
RotatedBitmap.SetPixel(bmpHeight - Y - 1, X, bmp.GetPixel(X, Y))
Next Y
Next X

Return RotatedBitmap

End Function

Public Shared Function RotateAntiClockwise(ByVal bmp As Bitmap) As Bitmap

Dim bmpWidth As Integer = bmp.Width
Dim bmpHeight As Integer = bmp.Height

Dim RotatedBitmap As New Bitmap(bmpHeight, bmpWidth)

For X As Integer = 0 To bmpWidth - 1
For Y As Integer = 0 To bmpHeight - 1
RotatedBitmap.SetPixel(Y, bmpWidth - X - 1, bmp.GetPixel(X, Y))
Next Y
Next X

Return RotatedBitmap

End Function
المثال التالي يوضح كيفية استخدام الدالتان أعلاه ولتنفيذ ذلك افتح مشروع وأضف له صورة ثم اضف له PictureBox وأضف له عدد 2 باتون ثم اكتب الكود بالشكل التالي


كود :
Public Class Form1

Dim bm As Bitmap = New Bitmap(My.Resources.body1)

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

PictureBox1.Image = bm
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim bmR As Bitmap = RotateClockwise(PictureBox1.Image)
PictureBox1.Image = bmR

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim bmR As Bitmap = RotateAntiClockwise(PictureBox1.Image)
PictureBox1.Image = bmR

End Sub

Public Shared Function RotateClockwise(ByVal bmp As Bitmap) As Bitmap

Dim bmpWidth As Integer = bmp.Width
Dim bmpHeight As Integer = bmp.Height

Dim RotatedBitmap As New Bitmap(bmpHeight, bmpWidth)

For X As Integer = 0 To bmpWidth - 1
For Y As Integer = 0 To bmpHeight - 1
RotatedBitmap.SetPixel(bmpHeight - Y - 1, X, bmp.GetPixel(X, Y))
Next Y
Next X

Return RotatedBitmap

End Function

Public Shared Function RotateAntiClockwise(ByVal bmp As Bitmap) As Bitmap

Dim bmpWidth As Integer = bmp.Width
Dim bmpHeight As Integer = bmp.Height

Dim RotatedBitmap As New Bitmap(bmpHeight, bmpWidth)

For X As Integer = 0 To bmpWidth - 1
For Y As Integer = 0 To bmpHeight - 1
RotatedBitmap.SetPixel(Y, bmpWidth - X - 1, bmp.GetPixel(X, Y))
Next Y
Next X

Return RotatedBitmap
End Function

End Class



بالتوفيق

أخوكم عمر
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  Compare Images المقارنة بين الصور Abu Ehab 0 92 31-10-18, 04:27 PM
آخر رد: Abu Ehab
  اصنع محرر أكواد خاص بك باستخدام الأداة RichTextBox السكر المغرور 13 2,836 19-08-18, 09:27 AM
آخر رد: elgokr
  [مقال] دوال التعامل مع النصوص Strings - VB.NET ابو ليلى 9 4,400 08-07-18, 02:36 AM
آخر رد: خلاف
Exclamation [VB.NET] التعامل مع ال CMD عن طريق ال TextBox YousefOkasha 5 437 02-06-18, 09:34 PM
آخر رد: YousefOkasha
  التــعامل مع cmd من خلال الدوت نت مبتدئ في الاحتراف 3 1,055 02-06-18, 12:36 AM
آخر رد: YousefOkasha
  مقدمة إلي ضغط الصور ..... Zip Bitmap silverlight 0 232 10-05-18, 04:35 AM
آخر رد: silverlight
  حساب قيمة معادلة(اقصد صيغة دون مجاهيل) مكتوبة بالتكست : الجزء الخامس والاخير محمد شريقي 4 1,589 23-02-18, 10:44 PM
آخر رد: العواد الصغير
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 2 1,444 22-01-18, 12:49 AM
آخر رد: amna jamal
  التعامل مع الملفات الصوتية ........دردشة برمجية RaggiTech 8 5,327 28-11-17, 11:23 PM
آخر رد: ahmed4240
  شرح خوارزميات معالجة الصور (من دروس الاستاذ فوزي برزنجي) ناديه الشجيري 16 15,336 30-10-17, 04:05 PM
آخر رد: alsouf

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


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