02-10-12, 03:20 PM
كاتب الموضوع : silverlight
التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI اللغة المستخدمة: الفيجوال بيسك
التطبيق: فيجوال استوديو 2005 و 2008
المستوي: التقييم متروك للقارئ
إعداد: مهندس / عمر أمين إبراهيم
الجزء السابع: كيف نرسم الصورة مائلة Skew
رسم الصورة بشكل مائل أو عمل Skew للصورة مبني علي فكرة بسيطة جدا وهي أننا نقوم بتعريف الصورة ثم نقوم بتعريف صورة جديدة لها نفس أبعاد الصورة الأصلية ثم نقوم بتعريف مستطيل Rectangle من الصورة الجديدة ثم نقوم بتحديد مجموعة من النقاط Points داخل هذا المستطيل ثم نرسم الصورة الأصلية داخل حدود هذه النقاط والكود التالي يوضح كيفية عمل ذلك
ولتنفيذ الكود افتح مشروع جديد وأضف له PictureBox ثم أضف صورة للمشروع ثم في الحدث Load للفورم اكتب الكود التالي
كود :
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim m_image As New Bitmap(My.Resources.imgsrv)
Dim bmp As New Bitmap(m_image.Width, m_image.Height, m_image.PixelFormat)
Using g As Graphics = Graphics.FromImage(bmp)
Dim rect As Rectangle = New Rectangle(0, 0, bmp.Width, bmp.Height)
Dim x As Integer = 120
Dim y As Integer = 80
Dim offset As Size = New Size(x, y)
Dim points As Point() = New Point() {New Point(rect.Left + offset.Width, rect.Top + offset.Height), New Point(rect.Right, rect.Top + offset.Height), New Point(rect.Left, rect.Bottom - offset.Height)}
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality
g.DrawImage(m_image, points)
End Using
PictureBox1.Image = bmp
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage
End Sub
End Class
و الأن لنبني دالة Function من الكود أعلاه وسنطلق عليها اسم SkewImage Function
وسيكون شكل الدالة كالتالي
كود :
Public Shared Function SkewImage(ByVal bitmap As Bitmap, ByVal offsetWidth As Integer, ByVal offsetHeight As Integer) As Bitmap
Dim bmp As New Bitmap(bitmap.Width, bitmap.Height, bitmap.PixelFormat)
Using g As Graphics = Graphics.FromImage(bmp)
Dim rect As Rectangle = New Rectangle(0, 0, bmp.Width, bmp.Height)
Dim offset As Size = New Size(offsetWidth, offsetHeight)
Dim points As Point() = New Point() {New Point(rect.Left + offset.Width, rect.Top + offset.Height), New Point(rect.Right, rect.Top + offset.Height), New Point(rect.Left, rect.Bottom - offset.Height)}
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality
g.DrawImage(bitmap, points)
End Using
Return bmp
End Function
كود :
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim m_image As New Bitmap(My.Resources.imgsrv)
Dim ImageSkewed As Bitmap = SkewImage(m_image, 30, 50)
PictureBox1.Image = ImageSkewed
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage
End Sub
Public Shared Function SkewImage(ByVal bitmap As Bitmap, ByVal offsetWidth As Integer, ByVal offsetHeight As Integer) As Bitmap
Dim bmp As New Bitmap(bitmap.Width, bitmap.Height, bitmap.PixelFormat)
Using g As Graphics = Graphics.FromImage(bmp)
Dim rect As Rectangle = New Rectangle(0, 0, bmp.Width, bmp.Height)
Dim offset As Size = New Size(offsetWidth, offsetHeight)
Dim points As Point() = New Point() {New Point(rect.Left + offset.Width, rect.Top + offset.Height), New Point(rect.Right, rect.Top + offset.Height), New Point(rect.Left, rect.Bottom - offset.Height)}
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality
g.DrawImage(bitmap, points)
End Using
Return bmp
End Function
End Class
بالتوفيق
أخوكم عمر