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

هل من الممكن استرجاع الألوان الموجودة في الصورة ؟
وهنا سوف نستخدم نفس الفكرة أو نفس الأسلوب الذي استخدمناه في السؤال السابق وكما تلاحظ عزيزي القارئ أن الأمر يتكرر ولكنه يأخذ أشكالا أخري فقط.
إذن باستخدام جملة For…..Next أيضا نقرأ الألوان الموجودة بصورة ما ثم نضيفها الي مصفوفة ثم نسترجع الألوان من المصفوفة ونستخدمها كيفما شئنا وهنا نحن نسترجع Color

وسوف أعطي مثالا واحدا فقط ويمكنك أنت عزيزي القارئ أن تستخدم نفس الأسلوب الذي استخدمناه في إجابة السؤال الأول لكي تسترجع الألوان بالطريقة التي تريدها
ولتنفيذ المثال افتح مشروع وأضف له PictureBox ثم أضف له ListBox وقم بإضافة صورة واستخدمها داخل المشروع ثم اكتب الكود بالشكل التالي


كود :
Public Class Form1

Dim bmp As Bitmap = New Bitmap(My.Resources.imgsrv)
Dim ColorArray As New System.Collections.ArrayList()

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

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

For Each isColor As Color In ColorArray

ListBox1.Items.Add(isColor)
ListBox1.Sorted = True

Next

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

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

End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

For i As Integer = 0 To ColorArray.Count - 1
Me.BackColor = ListBox1.SelectedItem
Next

End Sub

End Class
عليك عزيزي القارئ أن تلاحظ المتغير C وهو عبارة عن Integer وهو هنا سوف يسترجع عدد الألوان الموجود في Array بدون استخدام الدالة التي صنعناها سابقا والخاصة باسترجاع عدد الألوان الموجودة بصورة ما وستلاحظ أيضا أن الكود تقريبا لم يتغير كثيرا ولكننا قمنا بعمل تعديل بسيط جدا حتى نسترجع الألوان الموجودة بالصورة

طبعا من الممكن الاستغناء عن استخدام المصفوفات وبالتالي استرجاع الألوان مباشرة ووضعها في ListBox
والكود التالي يوضح ذلك وعليك أن تلاحظ عزيزي القارئ استخدام جملة IF لتجنب تكرار المدخلات الي ListBox وعليك أن تلاحظ أيضا المتغير c وهو عبارة عن Integer الذي يعطينا مباشرة عدد الألوان الموجودة بالصورة


كود :
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 clr As Color
For y As Integer = 0 To bmp.Height - 1
For x As Integer = 0 To bmp.Width - 1
clr = bmp.GetPixel(x, y)
If Not ListBox1.Items.Contains(clr) Then ListBox1.Items.Add(clr)
Next
Next

ListBox1.Sorted = True

Dim c As Integer = ListBox1.Items.Count
Me.Text = c.ToString

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

End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

Me.BackColor = ListBox1.SelectedItem

End Sub

End Class
الأن وكالمعتاد لنبني دالة من ألمثال الموجود بالكود أعلاه وسنطلق عليها إسم GetColorsInBitmap وهنا هدفنا هو أن نسترجع مصفوفة بها الألوان الموجودة بأي صورة


كود :
Public Shared Function GetColorsInBitmap(ByVal bitmap As Bitmap) As ArrayList

Dim ColorArray As New System.Collections.ArrayList()

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

Return ColorArray

End Function
المثال التالي يوضح كيفية استخدام الدالة GetColorsInBitmap
ولتنفيذ المثال افتح مشروع وأضف له PictureBox ثم أضف له ListBox وقم بإضافة صورة واستخدمها داخل المشروع ثم اكتب الكود بالشكل التالي



كود :
Public Class Form1

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

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

Arr = GetColorsInBitmap(bmp)

For Each isColor As Color In Arr

ListBox1.Items.Add(isColor)
ListBox1.Sorted = True

Next

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

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

End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

For i As Integer = 0 To Arr.Count - 1
Me.BackColor = ListBox1.SelectedItem
Next

End Sub

Public Shared Function GetColorsInBitmap(ByVal bitmap As Bitmap) As ArrayList

Dim ColorArray As New System.Collections.ArrayList()

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

Return ColorArray

End Function

End Class
}}}
تم الشكر بواسطة:


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

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

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


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