تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - الجزء السادس
#1
كاتب الموضوع : 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
الأن لنبني دالة Function أو أكثر من دالة من الكود أعلاه وسنطلق علي هذه الدالة ResizeImage Function


كود :
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
وهذه أشكال أخري للدالة أعلاه وسنحتفظ أيضا بنفس الإسم وهو ResizeImage Function


كود :
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
في الدالة اعلاه نعطي المستخدم إمكانية إضافة الصورة علي أنها String أو من اسم ملف مثلا ثم تغيير ابعاد الصورة الي أبعاد جديدة يحددها

شكل أخر للدالة 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


بالتوفيق

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  نظرة على DropBox SDK و التعامل معها +برنامج رفع و تحميل ملفات ابو ليلى 4 4,880 08-09-22, 11:54 AM
آخر رد: saif2023
  الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! أنس محمود 10 7,836 19-07-22, 12:15 AM
آخر رد: StartLight4000
Video [درس فيديو] تقارير الكريستال ريبورت وتغيير مسار الصور أثناء التشغيل رمضان272 0 1,607 28-03-22, 03:18 AM
آخر رد: رمضان272
  شرح خوارزميات معالجة الصور (من دروس الاستاذ فوزي برزنجي) ناديه الشجيري 19 34,361 20-02-22, 02:13 PM
آخر رد: رضوان الجماعي
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 5,865 30-07-21, 05:14 PM
آخر رد: kebboud
Lightbulb [مقال] التعامل مع ملفات اوفيس من خلال مكتبة NPOI ابو ليلى 2 4,196 01-07-21, 11:42 AM
آخر رد: kebboud
Lightbulb [مقال] التعامل مع اختصارات الملفات Shortcuts Magic Sword 2 4,419 01-10-20, 11:36 AM
آخر رد: abomo3ath
  [مقال] دوال التعامل مع النصوص Strings - VB.NET ابو ليلى 10 25,141 15-04-19, 07:09 PM
آخر رد: alsouf
  Compare Images المقارنة بين الصور Abu Ehab 0 3,272 31-10-18, 04:27 PM
آخر رد: Abu Ehab
  اصنع محرر أكواد خاص بك باستخدام الأداة RichTextBox السكر المغرور 13 7,518 19-08-18, 09:27 AM
آخر رد: elgokr

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


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