02-10-12, 03:16 PM
كاتب الموضوع : 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
الأن لنبني دالة 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
كود :
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
كود :
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
كود :
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
وكما تلاحظ أننا الأن نمتلك عددا لا بأس به من الدوال وهذه الدوال تجعل التعامل مع الصور أكثر متعة وأيضا أنت الأن تستطيع أن تبني دوالا كثيرة من أفكار شبيهة
بالتوفيق
أخوكم عمر