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

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [درس فيديو] تحذير هام في التعامل مع For و Try ali.alfoly 3 120 07-12-16, 12:43 AM
آخر رد: silverlight
Wink [مقال] كفية التعامل مه الجملة الشرطية IF alims 8 3,532 19-11-16, 01:06 AM
آخر رد: LoveVb
  اصنع محرر أكواد خاص بك باستخدام الأداة RichTextBox السكر المغرور 8 1,538 03-09-16, 07:59 PM
آخر رد: tryold
  مشروع لجلب الصور من الماسحة الضوئية (Scanner) m.sami.ak 12 4,049 25-08-16, 09:30 PM
آخر رد: jassim316
  شرح خوارزميات معالجة الصور (من دروس الاستاذ فوزي برزنجي) ناديه الشجيري 14 7,822 09-04-16, 11:26 PM
آخر رد: بديع
  [درس فيديو] تشغيل اوامر Run من البرنامج & مثال غلق الويندوز بعد وقت محدد باستخدام VB.net أحمد النجار 1 544 23-12-15, 04:26 AM
آخر رد: الماجيك مسعد
Big Grin [مقال] كفية التعامل مع حلقة التكرار For , For Each alims 8 3,494 01-11-15, 11:51 PM
آخر رد: adel27
  [VB.NET] تشغيل Twain الخاص بسحب الصور من السكنر في حالة net framework4 ahmed saleh 4 679 25-10-15, 07:20 PM
آخر رد: عدنان الشمري
  Create, Save Tiff Image & Extract Images From TIFF Image silverlight 0 330 09-10-15, 01:40 PM
آخر رد: silverlight
  [VB.NET] التشفير باستخدام خوارزمية rsa alking-0999 10 1,395 08-07-15, 04:24 PM
آخر رد: مبرمج بلا حدود

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


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