تقييم الموضوع :
  • 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

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  شرح خوارزميات معالجة الصور (من دروس الاستاذ فوزي برزنجي) ناديه الشجيري 18 27,837 13-01-22, 09:37 PM
آخر رد: kkk1
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 4,107 30-07-21, 05:14 PM
آخر رد: kebboud
Lightbulb [مقال] التعامل مع ملفات اوفيس من خلال مكتبة NPOI ابو ليلى 2 2,813 01-07-21, 11:42 AM
آخر رد: kebboud
Lightbulb [مقال] التعامل مع اختصارات الملفات Shortcuts Magic Sword 2 3,374 01-10-20, 11:36 AM
آخر رد: abomo3ath
  نظرة على DropBox SDK و التعامل معها +برنامج رفع و تحميل ملفات ابو ليلى 3 2,455 14-04-20, 06:02 PM
آخر رد: الوايلي
  [مقال] دوال التعامل مع النصوص Strings - VB.NET ابو ليلى 10 18,768 15-04-19, 07:09 PM
آخر رد: alsouf
  Compare Images المقارنة بين الصور Abu Ehab 0 2,277 31-10-18, 04:27 PM
آخر رد: Abu Ehab
  اصنع محرر أكواد خاص بك باستخدام الأداة RichTextBox السكر المغرور 13 5,861 19-08-18, 09:27 AM
آخر رد: elgokr
Exclamation [VB.NET] التعامل مع ال CMD عن طريق ال TextBox YousefOkasha 5 3,684 02-06-18, 09:34 PM
آخر رد: YousefOkasha
  التــعامل مع cmd من خلال الدوت نت مبتدئ في الاحتراف 3 2,841 02-06-18, 12:36 AM
آخر رد: YousefOkasha

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


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