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

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


الجزء الثامن: التعامل مع الألوان في الصورة

قد يخطر في خاطر القارئ أنه يريد أن يستفيد قليلا من الألوان الموجودة بأي صورة إذن كيف نفعل ذلك؟ إذن لنضع مجموعة من الأسئلة ثم نحاول الإجابة عليها. في واقع الأمر هناك الكثير من الأسئلة التي من الممكن أن تدور حول هذا الجزء من المقال الذي نحاول فيه أن نتعرف علي الألوان في أي صورة
هل من الممكن معرفة عدد ألوان الصورة؟
الفكرة هنا هي استخدام جملة For…..Next لقراءة عدد الألوان الموجودة بصورة ما ثم نضيفها الي مصفوفة ثم نسترجع العدد الإجمالي للألوان من المصفوفة وهنا نحن نسترجع Integer وهناك الكثير من الأساليب التي من الممكن استخدامها في ذلك واعتقد System.Collections Class و أيضا به الكثير والكثير من الأشياء التي من الممكن أن تعطينا ما نريد وسوف نوضح ذلك بأكثر من مثال وفي النهاية كل الطرق التي من الممكن أن نستخدمها سوف تؤدي الهدف المطلوب ولسوف
مثال 1 استخدام ArrayList
لتنفيذ المثال: افتح مشروع جديد وأضف له PictureBox ثم عليك تعريف صورة ما واستخدم الكود التالي. لاحظ فقط استخدام IF لتجنب تكرار المدخلات


كود :
Public Class Form1

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

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

Dim ColorArray As New System.Collections.ArrayList()

Dim clr As Integer
For y As Integer = 0 To bmp.Height - 1
For x As Integer = 0 To bmp.Width - 1
clr = bmp.GetPixel(x, y).ToArgb()
If Not ColorArray.Contains(clr) Then ColorArray.Add(clr)
Next
Next

Dim c As Integer = ColorArray.Count
Me.Text = c.ToString

PictureBox1.Image = bmp
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage

End Sub

End Class
الأن لنبني دالة من ألمثال رقم 1 أعلاه ولنطلق عليها اسم GetImageColorsCount


كود :
Public Shared Function GetImageColorsCount(ByVal bitmap As Bitmap) As Integer

Dim ColorArray As New System.Collections.ArrayList()

Dim clr As Integer
For y As Integer = 0 To bitmap.Height - 1
For x As Integer = 0 To bitmap.Width - 1
clr = bitmap.GetPixel(x, y).ToArgb()
If Not ColorArray.Contains(clr) Then ColorArray.Add(clr)
Next
Next

GetImageColorsCount = ColorArray.Count

End Function
مثال 2 استخدام List (Of )
لتنفيذ المثال: افتح مشروع جديد وأضف له PictureBox ثم عليك تعريف صورة ما واستخدم الكود التالي. لاحظ فقط استخدام IF لتجنب تكرار المدخلات


كود :
Public Class Form1

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

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

Dim ColorList As New System.Collections.Generic.List(Of Integer)

Dim clr As Integer
For y As Integer = 0 To bmp.Height - 1

For x As Integer = 0 To bmp.Width - 1
clr = bmp.GetPixel(x, y).ToArgb()
If Not ColorList.Contains(clr) Then ColorList.Add(clr)
Next
Next

Dim d As Integer = ColorList.Count
Me.Text = d.ToString

PictureBox1.Image = bmp
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage

End Sub

End Class
الأن لنبني دالة من ألمثال رقم 2 أعلاه ولنطلق عليها اسم GetImageColorsCount


كود :
Public Shared Function GetImageColorsCount(ByVal bitmap As Bitmap) As Integer

Dim ColorList As New System.Collections.Generic.List(Of Integer)

Dim clr As Integer
For y As Integer = 0 To bitmap.Height - 1

For x As Integer = 0 To bitmap.Width - 1
clr = bitmap.GetPixel(x, y).ToArgb()
If Not ColorList.Contains(clr) Then ColorList.Add(clr)
Next
Next

GetImageColorsCount = ColorList.Count

End Function
مثال 3 استخدام HashSet
لتنفيذ المثال: افتح مشروع جديد وأضف له PictureBox ثم عليك تعريف صورة ما واستخدم الكود التالي. لاحظ فقط أمما لم نستخدم IF لتجنب تكرار المدخلات حيث والسبب هو أن HashSet يمنع تكرار المدخلات اتوماتيكيا وهذا المثال يمكن تنفيذه فقط مع الفيجوال دوت نت 2008 حيث أن الكلاس HashSet موجود فقط في الدوت نت 3.5
وهذا الكلاس رائع فعلا واتمني أنكم تدرسوه جيدا


كود :
Public Class Form1

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

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

Dim ColorSet As New System.Collections.Generic.HashSet(Of Integer)
For y As Integer = 0 To bmp.Height - 1

For x As Integer = 0 To bmp.Width - 1
ColorSet.Add(bmp.GetPixel(x, y).ToArgb())
Next
Next

Dim b As Integer = ColorSet.Count
Me.Text = b.ToString

PictureBox1.Image = bmp
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage

End Sub

End Class
الأن لنبني دالة من ألمثال رقم 3 أعلاه ولنطلق عليها اسم GetImageColorsCount


كود :
Public Shared Function GetImageColorsCount(ByVal bitmap As Bitmap) As Integer

Dim ColorSet As New System.Collections.Generic.HashSet(Of Integer)
For y As Integer = 0 To bmp.Height - 1

For x As Integer = 0 To bmp.Width - 1
ColorSet.Add(bmp.GetPixel(x, y).ToArgb())
Next
Next
GetImageColorsCount = ColorSet.Count

End Function
سوف أعطي مثالا واحد فقط علي كيفية استخدام الدالة لأن الطريقة واحدة لو استخدمنا أي من الأفكار الموجود تحت الأمثلة الثلاثة أعلاه
والمثال التالي يوضح كيفية استخدام الدالة GetImageColorCount


كود :
Public Class Form1

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

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

PictureBox1.Image = bmp
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage

Dim b As Integer = GetImageColorsCount(PictureBox1.Image)
Me.Text = b.ToString

End Sub

Public Shared Function GetImageColorsCount(ByVal bitmap As Bitmap) As Integer

Dim ColorSet As New System.Collections.Generic.HashSet(Of Integer)
For y As Integer = 0 To bitmap.Height - 1

For x As Integer = 0 To bitmap.Width - 1
ColorSet.Add(bitmap.GetPixel(x, y).ToArgb())
Next
Next
GetImageColorsCount = ColorSet.Count

End Function

End Class
عموما وفي النهاية من الممكن استخدام أي دالة تريدها من الأمثلة الثلاثة أعلاه أو أن تصنع داله أخري شبيهة بأي أسلوب تراه مناسبا وعموما الهدف النهائي واحد وهو بناء دالة نستطيع من خلالها الحصول علي عدد الألوان الموجودة بأي صورة
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - الجزء الثامن - بواسطة Raggi Tech - 02-10-12, 03:21 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  نظرة على DropBox SDK و التعامل معها +برنامج رفع و تحميل ملفات ابو ليلى 5 5,969 16-08-24, 04:39 PM
آخر رد: ackore
  الجزء الثالث من:كيف تجعل الـ Text Box ذكي!يترجم العمليات الحسابية ويخرج الناتج (الأقواس المتعددة) !! أنس محمود 10 8,386 19-07-22, 12:15 AM
آخر رد: StartLight4000
Video [درس فيديو] تقارير الكريستال ريبورت وتغيير مسار الصور أثناء التشغيل رمضان272 0 1,999 28-03-22, 03:18 AM
آخر رد: رمضان272
  شرح خوارزميات معالجة الصور (من دروس الاستاذ فوزي برزنجي) ناديه الشجيري 19 35,536 20-02-22, 02:13 PM
آخر رد: رضوان الجماعي
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 6,341 30-07-21, 05:14 PM
آخر رد: kebboud
Lightbulb [مقال] التعامل مع ملفات اوفيس من خلال مكتبة NPOI ابو ليلى 2 4,616 01-07-21, 11:42 AM
آخر رد: kebboud
Lightbulb [مقال] التعامل مع اختصارات الملفات Shortcuts Magic Sword 2 4,707 01-10-20, 11:36 AM
آخر رد: abomo3ath
  [مقال] دوال التعامل مع النصوص Strings - VB.NET ابو ليلى 10 27,155 15-04-19, 07:09 PM
آخر رد: alsouf
  Compare Images المقارنة بين الصور Abu Ehab 0 3,642 31-10-18, 04:27 PM
آخر رد: Abu Ehab
  اصنع محرر أكواد خاص بك باستخدام الأداة RichTextBox السكر المغرور 13 8,180 19-08-18, 09:27 AM
آخر رد: elgokr

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


يقوم بقرائة الموضوع: