تقييم الموضوع :
  • 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



بالتوفيق

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [درس فيديو] تحذير هام في التعامل مع For و Try ali.alfoly 3 110 07-12-16, 12:43 AM
آخر رد: silverlight
Wink [مقال] كفية التعامل مه الجملة الشرطية IF alims 8 3,524 19-11-16, 01:06 AM
آخر رد: LoveVb
  اصنع محرر أكواد خاص بك باستخدام الأداة RichTextBox السكر المغرور 8 1,532 03-09-16, 07:59 PM
آخر رد: tryold
  مشروع لجلب الصور من الماسحة الضوئية (Scanner) m.sami.ak 12 4,032 25-08-16, 09:30 PM
آخر رد: jassim316
  شرح خوارزميات معالجة الصور (من دروس الاستاذ فوزي برزنجي) ناديه الشجيري 14 7,809 09-04-16, 11:26 PM
آخر رد: بديع
  [درس فيديو] تشغيل اوامر Run من البرنامج & مثال غلق الويندوز بعد وقت محدد باستخدام VB.net أحمد النجار 1 542 23-12-15, 04:26 AM
آخر رد: الماجيك مسعد
Big Grin [مقال] كفية التعامل مع حلقة التكرار For , For Each alims 8 3,488 01-11-15, 11:51 PM
آخر رد: adel27
  [VB.NET] تشغيل Twain الخاص بسحب الصور من السكنر في حالة net framework4 ahmed saleh 4 673 25-10-15, 07:20 PM
آخر رد: عدنان الشمري
  Create, Save Tiff Image & Extract Images From TIFF Image silverlight 0 328 09-10-15, 01:40 PM
آخر رد: silverlight
  [VB.NET] التشفير باستخدام خوارزمية rsa alking-0999 10 1,390 08-07-15, 04:24 PM
آخر رد: مبرمج بلا حدود

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


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