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

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

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

ماذا تعني كلمة Fading ؟ هذه الكلمة تعني إضعاف أو إخفاء شئ و أعتقد أن المعني الدقيق لكلمة Fading هو أننا نجعل شيئا يذوي أو نجعل هذا الشئ خافتا والمعني المقصود هنا هو أن نجعل جزء من الصورة يذوي ويختفي بشكل ما
الفكرة تتلخص في أننا نقوم بتعريف الصورة ثم نقوم بتعريف Bitmap Object من الصورة الأصلية ثم تعريف Rectangle بحيث يكون أبعاده تساوي أبعاد Bitmap Object ثم نقوم بتعريف LinearGradientBrush حيث نستخدم هنا لونان احدهما عبارة عن Color.Empy والأخر أي لون نختاره ثم باستخدام Graphics Class نقوم برسم الصورة الأصلية في المستطيل ثم نقوم بتعبئة هذا المستطيل باستخدام LinearGradientBrush ثم يمكننا حينها استخدام الصورة كما نريد
مثال علي ذلك


كود :
Public Class Form1

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

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

Dim Angle As Integer = 90

Dim dest_bm As New Bitmap(CInt(bmp.Width), CInt(bmp.Height), bmp.PixelFormat)
Dim g As Graphics = Graphics.FromImage(dest_bm)
Dim rect As Rectangle = New Rectangle(0, 0, dest_bm.Width, dest_bm.Height)
Dim lgb As New System.Drawing.Drawing2D.LinearGradientBrush(rect, Color.Empty, Color.FromArgb(255, Color.Blue), Angle, True)
g.DrawImage(bmp, rect)
g.FillRectangle(lgb, rect)

PictureBox1.Image = dest_bm

End Sub

End Class
حاول عزيزي القارئ أن تقوم بتغيير القيمة للمتغير Angle في الكود أعلاه مثلا حاول أن تجعل قيمته 90 أو 180 أو 270 أو أي قيمة تريدها ما بين القيمة صفر الي 360 وستري أن مكان Fading يتغير بناء علي تغير قيمة هذه الزاوية

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


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

Dim Angle As Integer = 90
Dim dest_bm As New Bitmap(CInt(bmp.Width), CInt(bmp.Height), bmp.PixelFormat)
Dim g As Graphics = Graphics.FromImage(dest_bm)
Dim rect As Rectangle = New Rectangle(0, 0, dest_bm.Width, dest_bm.Height)
Dim lgb As New System.Drawing.Drawing2D.LinearGradientBrush(rect, Color.Empty, Color.FromArgb(255, Color.Blue, Angle, True))
g.DrawImage(bmp, rect)
g.FillRectangle(lgb, rect)

Return dest_bm

End Function
الكود التالي يوضح كيفية استخدام الدالة FadeImage Function


كود :
Public Class Form1

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

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

Dim dest_bm As Bitmap = FadeImage(bmp)
PictureBox1.Image = dest_bm

End Sub

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

Dim Angle As Integer = 90
Dim dest_bm As New Bitmap(CInt(bmp.Width), CInt(bmp.Height), bmp.PixelFormat)
Dim g As Graphics = Graphics.FromImage(dest_bm)
Dim rect As Rectangle = New Rectangle(0, 0, dest_bm.Width, dest_bm.Height)
Dim lgb As New System.Drawing.Drawing2D.LinearGradientBrush(rect, Color.Empty, Color.FromArgb(255, Color.Blue, Angle, True))
g.DrawImage(bmp, rect)
g.FillRectangle(lgb, rect)

Return dest_bm

End Function

End Class
الأن لنبني داله أخري أو نسخة أخري للدالة من نفس الكود أعلاه وسنحتفظ بنفس الاسم وهو FadeImage Function ولكننا هنا سنعطي المستخدم أولوية تغيير قيمة الزاوية وسيكون شكل الدالة كالأتي


كود :
Public Shared Function FadeImage(ByVal bmp As Bitmap, ByVal Angle As Integer) As Bitmap

If Angle < 0 OrElse Angle > 360 Then

Throw New ArgumentOutOfRangeException("Angle must be between 0 and 360.")
End If

Dim dest_bm As New Bitmap(CInt(bmp.Width), CInt(bmp.Height), bmp.PixelFormat)
Dim g As Graphics = Graphics.FromImage(dest_bm)
Dim rect As Rectangle = New Rectangle(0, 0, dest_bm.Width, dest_bm.Height)
Dim lgb As New System.Drawing.Drawing2D.LinearGradientBrush(rect, Color.Empty, Color.FromArgb(255, Color.Blue),Angle, True)
g.DrawImage(bmp, rect)
g.FillRectangle(lgb, rect)

Return dest_bm

End Function
وهذه صورة أخري أو نسخة أخري لنفس الدالة من الكود أعلاه وسنحتفظ بنفس الاسم وهو FadeImage Function ولكننا هنا سنعطي المستخدم أولوية تغيير قيمة الزاوية وأيضا تغيير قيمة اللون المستخدم و سيكون شكل الدالة كالأتي


كود :
Public Shared Function FadeImage(ByVal bmp As Bitmap, ByVal Angle As Integer, ByVal color As Color) As Bitmap

If Angle < 0 OrElse Angle > 360 Then

Throw New ArgumentOutOfRangeException("Angle must be between 0 and 360.")
End If

Dim dest_bm As New Bitmap(CInt(bmp.Width), CInt(bmp.Height), bmp.PixelFormat)
Dim g As Graphics = Graphics.FromImage(dest_bm)
Dim rect As Rectangle = New Rectangle(0, 0, dest_bm.Width, dest_bm.Height)
Dim lgb As New System.Drawing.Drawing2D.LinearGradientBrush(rect, color.Empty,color.FromArgb(255, color), Angle, True)
g.DrawImage(bmp, rect)
g.FillRectangle(lgb, rect)

Return dest_bm

End Function
والكود التالي يوضح مثالا علي استخدام الشكل الأخير للدالة


كود :
Public Class Form1

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

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

Dim dest_bm As Bitmap = FadeImage(bmp, 90, Color.Lime)
PictureBox1.Image = dest_bm

End Sub

Public Shared Function FadeImage(ByVal bmp As Bitmap, ByVal Angle As Integer, ByVal color As Color) As Bitmap

If Angle < 0 OrElse Angle > 360 Then

Throw New ArgumentOutOfRangeException("Angle must be between 0 and 360.")
End If

Dim dest_bm As New Bitmap(CInt(bmp.Width), CInt(bmp.Height), bmp.PixelFormat)
Dim g As Graphics = Graphics.FromImage(dest_bm)
Dim rect As Rectangle = New Rectangle(0, 0, dest_bm.Width, dest_bm.Height)
Dim lgb As New System.Drawing.Drawing2D.LinearGradientBrush(rect, color.Empty, color.FromArgb(255, color), Angle, True)
g.DrawImage(bmp, rect)
g.FillRectangle(lgb, rect)

Return dest_bm

End Function

End Class
أعتقد عزيزي القارئ أننا كلما تقدمنا في مناقشة موضوع التعامل مع الصور في بيئة الدوت نت فإن الأمر يصبح أكثر سهولة
وكما تلاحظ أننا الأن نمتلك عددا لا بأس به من الدوال وهذه الدوال تجعل التعامل مع الصور أكثر متعة وأيضا أنت الأن تستطيع أن تبني دوالا كثيرة من أفكار شبيهة




بالتوفيق

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


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

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


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