02-10-12, 03:19 PM
كاتب الموضوع : silverlight
التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI اللغة المستخدمة: الفيجوال بيسك
التطبيق: فيجوال استوديو 2005 و 2008
المستوي: التقييم متروك للقارئ
إعداد: مهندس / عمر أمين إبراهيم
الجزء السادس:كيف نقوم بتغيير أبعاد الصورة Resize
تغيير أبعاد الصورة مبنية علي فكرة بسيطة جدا هي أننا نقوم أولا بتحديد الصورة ثم تعريف صورة جديدة بأبعاد مختلفة نحددها ثم نعيد رسم الصورة الأصلية بالأبعاد الجديدة والكود التالي يوضح ذلك
لتنفيذ الكود افتح مشروع جدي وأضف له PictureBox ثم قم بتعريف الصورة الأصلية ثم اكتب الكود بالشكل التالي في الحدث Load الخاص بالفورم وهناك ملحوظه هامة علي الكود التالي كما تحدثنا في مقدمة الموضوع وهي أننا عندما نقوم بتعريف صورة جديدة ثم نرسم بداخلها الصورة الأصلية بالأبعاد الجديدة فإن كل ذلك يحدث في Memory الخاصة بجهاز الكمبيوتر لذا يجب مراعاة ذلك ونحن نصمم برامجنا
كود :
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' تعريف الصورة الأصلية
Dim bmp As Bitmap = New Bitmap(My.Resources.imgsrv)
' تعريف الصورة الجديدة بابعاد اكبر
Dim bmp1 As New Bitmap(bmp.Width * 3, bmp.Height * 3, bmp.PixelFormat)
' هنا نستخدم الجرافيكس كلاس لرسم الصورة
Dim g As Graphics = Graphics.FromImage(bmp1)
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality
' هنا نرسم الصورة الأصلية بالأبعاد الجديدة
g.DrawImage(bmp, New Rectangle(0, 0, bmp1.Width, bmp1.Height))
PictureBox1.Image = bmp1
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage
End Sub
End Class
كود :
Public Shared Function ResizeImage(ByVal bitmap As Bitmap, ByVal NewWidth As Integer, ByVal NewHeight As Integer) As Bitmap
Dim NewSize As New Size(NewWidth, NewHeight)
Dim bmp As New Bitmap(NewSize.Width, NewSize.Height, bitmap.PixelFormat)
Dim g As Graphics = Graphics.FromImage(bmp)
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality
g.DrawImage(bitmap, New Rectangle(New Point(0, 0), NewSize))
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 bmp As Bitmap = New Bitmap(My.Resources.imgsrv)
Dim bmp1 As Bitmap = ResizeImage(bmp, 200, 200)
PictureBox1.Image = bmp1
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage
End Sub
Public Shared Function ResizeImage(ByVal bitmap As Bitmap, ByVal NewWidth As Integer, ByVal NewHeight As Integer) As Bitmap
Dim NewSize As New Size(NewWidth, NewHeight)
Dim bmp As New Bitmap(NewSize.Width, NewSize.Height, bitmap.PixelFormat)
Dim g As Graphics = Graphics.FromImage(bmp)
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality
g.DrawImage(bitmap, New Rectangle(New Point(0, 0), NewSize))
Return bmp
End Function
End Class
كود :
Public Shared Function ResizeImage(ByVal ImagePath As String, ByVal NewWidth As Integer, ByVal NewHeight As Integer) As Bitmap
Dim NewSize As New Size(NewWidth, NewHeight)
Dim img As Image = Image.FromFile(ImagePath)
Dim bmp As New Bitmap(NewSize.Width, NewSize.Height, img.PixelFormat)
Dim g As Graphics = Graphics.FromImage(bmp)
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality
g.DrawImage(img, New Rectangle(New Point(0, 0), NewSize))
Return bmp
End Function
شكل أخر للدالة ResizeImage Function حيث هنا نعطي المستخدم إمكانية إضافة الصورة ثم ضرب أبعاد الصورة الأصلية في مقياس جديد أو Scale جديد طبعا من الممكن إضافة شروط كثيرة داخل الدالة مثل تحديد اقل أو اكبر قيمة لهذا Scale وفي حالة إن لم يتحقق هذه الشرط يحدث خطأ ولكن كما تلاحظون فإن الفكرة بالنهاية واحدة بغض النظر عن الأسلوب المستخدم في كتابة الدالة
كود :
Public Shared Function ResizeImage(ByVal bitmap As Bitmap, ByVal Scale As Single) As Bitmap
Dim bmp As New Bitmap(CInt(bitmap.Width * Scale), CInt(bitmap.Height * Scale), bitmap.PixelFormat)
Dim g As Graphics = Graphics.FromImage(bmp)
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality
g.DrawImage(bitmap, 0, 0, bmp.Width, bmp.Height)
Return bmp
End Function
بالتوفيق
أخوكم عمر