التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - الجزء الحادي عشر - RaggiTech - 02-10-12
كاتب الموضوع : silverlight
التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI
اللغة المستخدمة: الفيجوال بيسك
التطبيق: فيجوال استوديو 2005 و 2008
المستوي: التقييم متروك للقارئ
إعداد: مهندس / عمر أمين إبراهيم
الجزء الحادي عشر: رسم صورة شفافة Image Transparency
أعتقد بعد مناقشتنا الألوان في الصورة في الجزء الثامن من المقال قد أصبح ممكن أن نتلاعب قليلا بشفافية الصورة وبالطبع سوف نستخدم نفس الأسلوب الذي اتبعناه بالجزء الثامن وهو استخدام GetPixel و SetPixel ثم نقوم بتغيير درجة شفافية كل لون موجود بالصورة ولنعطي مثالا علي كيفية تنفيذ ذلك ولتنفيذ المثال افتح مشروع جديد ثم قم بتعريف صورة وأضف للفورم PictureBox ثم اكتب الكود بالشكل التالي
كود :
Public Class Form1
Dim bmp As New Bitmap(My.Resources.imgsrv)
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
For x As Integer = 0 To bmp.Width - 1
For y As Integer = 0 To bmp.Height - 1
Dim bmpColor As Color = bmp.GetPixel(x, y)
Dim newclr As Color = Color.FromArgb(50, bmpColor.R, bmpColor.G, bmpColor.B)
bmp.SetPixel(x, y, newclr)
Next
Next
PictureBox1.Image = bmp
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage
End Sub
End Class
وكالمعتاد لنبني دالة أو مجموعة من الدوال من الكود أعلاه والكود التالي يوضح أشكال مختلفة لنفس الدالة
كود :
Public Shared Function SetImageTransparency(ByVal bitmap As Bitmap, ByVal Alpha As Integer) As Bitmap
If Alpha < 50 OrElse Alpha > 255 Then
Throw New ArgumentOutOfRangeException("Alpha must be between 50 and 255.")
End If
For x As Integer = 0 To bitmap.Width - 1
For y As Integer = 0 To bitmap.Height - 1
Dim bmpColor As Color = bitmap.GetPixel(x, y)
Dim newclr As Color = Color.FromArgb(Alpha, bmpColor.R, bmpColor.G, bmpColor.B)
bitmap.SetPixel(x, y, newclr)
Next
Next
Dim bmp As New Bitmap(bitmap.Width, bitmap.Height, bitmap.PixelFormat)
Dim g As Graphics = Graphics.FromImage(bmp)
g.DrawImage(bitmap, 0, 0)
Return bmp
End Function
Public Shared Function SetImageTransparency(ByVal bitmap As Bitmap, ByVal Alpha As Integer, ByVal Transparent As Boolean) As Bitmap
If Alpha < 50 OrElse Alpha > 255 Then
Throw New ArgumentOutOfRangeException("Alpha must be between 50 and 255.")
End If
If Transparent Then
For x As Integer = 0 To bitmap.Width - 1
For y As Integer = 0 To bitmap.Height - 1
Dim bmpColor As Color = bitmap.GetPixel(x, y)
Dim newclr As Color = Color.FromArgb(Alpha, bmpColor.R, bmpColor.G, bmpColor.B)
bitmap.SetPixel(x, y, newclr)
Next
Next
Else
For x As Integer = 0 To bitmap.Width - 1
For y As Integer = 0 To bitmap.Height - 1
Dim bmpColor As Color = bitmap.GetPixel(x, y)
Dim newclr As Color = Color.FromArgb(bmpColor.R, bmpColor.R, bmpColor.R)
bitmap.SetPixel(x, y, newclr)
Next
Next
End If
Dim bmp As New Bitmap(bitmap.Width, bitmap.Height, bitmap.PixelFormat)
Dim g As Graphics = Graphics.FromImage(bmp)
g.DrawImage(bitmap, 0, 0)
Return bmp
End Function
قد يتساءل القارئ ماذا لو أردنا أن نستخدم إحدي الدوال التي بنيناها في الأجزاء السابقة من الموضوع؟
من المؤكد أننا نستطيع أن نستخدم الدوال السابقة مع بعضها البعض لإنتاج إما دوال أخري أكثر كفاءة بل أيضا يمكننا أن نستخدم الدوال السابقة إما بشكل منفرد أو من داخل بعضها البعض وذلك لهدف ما نريده ولسوف أعطي مثالا علي ذلك ولكن أولا لتعطي مثالا علي كيفية استخدام إحدي الدوال التي بنيناها أعلاه وهي الدوال الخاصة بتعديل شفافية الصورة ولتنفيذ المثال افتح مشروع جديد وقم بتعريف صورة ثم أضف PictureBox للفورم ثم اكتب الكود بالشكل التالي
كود :
Public Class Form1
Dim bmp As New Bitmap(My.Resources.imgsrv)
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
PictureBox1.Image = SetImageTransparency(bmp, 50)
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage
End Sub
Public Shared Function SetImageTransparency(ByVal bitmap As Bitmap, ByVal Alpha As Integer) As Bitmap
If Alpha < 50 OrElse Alpha > 255 Then
Throw New ArgumentOutOfRangeException("Alpha must be between 50 and 255.")
End If
For x As Integer = 0 To bitmap.Width - 1
For y As Integer = 0 To bitmap.Height - 1
Dim bmpColor As Color = bitmap.GetPixel(x, y)
Dim newclr As Color = Color.FromArgb(Alpha, bmpColor.R, bmpColor.G, bmpColor.B)
bitmap.SetPixel(x, y, newclr)
Next
Next
Dim bmp As New Bitmap(bitmap.Width, bitmap.Height, bitmap.PixelFormat)
Dim g As Graphics = Graphics.FromImage(bmp)
g.DrawImage(bitmap, 0, 0)
Return bmp
End Function
End Class
والأن لنعطي مثالا يوضح كيفية استخدام بعض الدوال من الاجزاء السابقة مع بعضها البعض وذلك بهدف إنتاج شكل أخر للصورة وسأستخدم هنا الدالة الخاصة بضبط شفافية الصورة وهي من الجزء الحادي عشر من المقال وأيضا الدالة TurnImageToGray Function وهي موجودة بالجزء الثامن من المقال والخاصة بالتعامل مع الألوان في الصورة
ولتنفيذ المثال عليك أن تفتح مشروع جديد ثم قم بتعريف صورة ما ثم أضف الي الفورم PictureBox حيث سنستخدمه لعرض الصورة بعد تعديلها ثم اكتب الكود بالشكل التالي وحاول ان تجرب بنفسك استخدام أكثر من دالة معا أو اصنع دالة جديدة من هذه الدوال كلها مجتمعة
كود :
Public Class Form1
Dim bmp As New Bitmap(My.Resources.imgsrv)
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim bmp1 As Bitmap = TurnImageToGray(bmp)
PictureBox1.Image = SetImageTransparency(bmp1, 50)
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage
End Sub
Public Shared Function SetImageTransparency(ByVal bitmap As Bitmap, ByVal Alpha As Integer) As Bitmap
If Alpha < 50 OrElse Alpha > 255 Then
Throw New ArgumentOutOfRangeException("Alpha must be between 50 and 255.")
End If
For x As Integer = 0 To bitmap.Width - 1
For y As Integer = 0 To bitmap.Height - 1
Dim bmpColor As Color = bitmap.GetPixel(x, y)
Dim newclr As Color = Color.FromArgb(Alpha, bmpColor.R, bmpColor.G, bmpColor.B)
bitmap.SetPixel(x, y, newclr)
Next
Next
Dim bmp As New Bitmap(bitmap.Width, bitmap.Height, bitmap.PixelFormat)
Dim g As Graphics = Graphics.FromImage(bmp)
g.DrawImage(bitmap, 0, 0)
Return bmp
End Function
Public Shared Function TurnImageToGray(ByVal bitmap As Bitmap) As Bitmap
For x As Integer = 0 To bitmap.Width - 1
For y As Integer = 0 To bitmap.Height - 1
Dim bmpColor As Color = bitmap.GetPixel(x, y)
Dim newclr As Color = Color.FromArgb(bmpColor.R, bmpColor.R, bmpColor.R)
bitmap.SetPixel(x, y, newclr)
Next
Next
Dim bmp As New Bitmap(bitmap.Width, bitmap.Height, bitmap.PixelFormat)
Dim g As Graphics = Graphics.FromImage(bmp)
g.DrawImage(bitmap, 0, 0)
Return bmp
End Function
End Class
بالتوفيق
أخوكم عمر
|