التنبيهات التالية ظهرت :
Warning [2] count(): Parameter must be an array or an object that implements Countable - Line: 864 - File: showthread.php PHP 7.4.33 (Linux)
File Line Function
/showthread.php 864 errorHandler->error



تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مقال- أفكار في الدوت نت Image To ColorPicker
#1
كاتب الموضوع : silverlight

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

مقدمـــــة:

في أحد الموضوعات الموجودة بالموقع كنت قد كتبت عن كيفية إسترجاع الألوان الموجودة في أي صورة Image ولأسترجاع الألوان نحناج الي الأتي

1- تعربف أي صورة
2- تعريف لون ما بدون إعطاؤه أي قيمة
3- تعريف Array حيث سنملأها بالألوان الموجودة بالصورة
4- ثم باستخدام جملة For...............Next نستطيع أن نسترد الألوان الموجود بهذه الصورة عن طريق جملة GetPixel ومن ثم نستخدم الألوان كما يحلو لنا. لكننا سنكتشف أننا نسترد عدد ضخم جدا من الألوان في أي صورة نستخدمها

الكود التالي يوضح كيفية تنفيذ الخطوات أعلاه.....

المثال الأول :


كود :
Dim bmp As Bitmap = New Bitmap(My.Resources.imgsrv)
Dim ColorArray As New System.Collections.ArrayList()
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
ولمزيد من التفاصيل عن كيفية التعامل مع الألوان الموجودة في الصور يمكنك عزيزي القارئ أن تراجع موضوع

التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - الجزء الثامن

في واقع الأمر و بما أننا نستطيع أن نسترجع أي لون لمكان ما علي أي صورة إذن فنحن نستطيع أن نستفيد من هذه الفكرة في أشياء أخري ومقال اليوم سيوضح كيفية الإستفادة من هذا الأمر..........

هل نحتاج الي وجود صورة أم لا

قد يتساءل البعض هل نحتاج إلي وجود صورة أم لا ؟ والإجابة علي هذا السؤال غالبا مرتبطة برؤية المبرمج في كتابة الكود فالمبرمج يستطيع أن يستخدم صورة موجودة علي جهازه أو أي صورة من أي مصدر مناسب أو يستطيع أن يبني الصورة ويرسمها من الصفر وهذا أمر ليس سهلا إلا في بعض الحالات القليلة والخطوات التالية توضح كيفية بناء صورة من الصفر

1- تعريف متغير عبارة عن Bitmap ونعطي له أبعاد مثل الطول Height والعرض Width
2- تعريف متغير يعبر عن Graphics Object من هذه الصورة ومن ثم نستخدمه في رسم ما نريد علي الصورة

الكود التالي يوضح فكرة بسيطة لبناء صورة من الصفر وسنلاحظ عند تجربة الكود وجود الصورة علي الفورم

المثال الثاني :


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

' تعريف أبعاد الصورة
Dim imageWidth As Integer = 100
Dim imageHeight As Integer = 75
' تعريف الصورة
Dim bmp As New Bitmap(imageWidth, imageHeight)

' تعريف الجرافكس
Dim gr As Graphics = Graphics.FromImage(bmp)

' رسم ما نريد من أشياء علي الصورة
Using lgb As New Drawing2D.LinearGradientBrush(New Rectangle(0, 0, 200, 250), Color.Transparent, Color.White, 90, True)
gr.FillRectangle(lgb, New Rectangle(0, 0, 250, 250))
End Using

Using lgb As New Drawing2D.LinearGradientBrush(New Rectangle(0, 0, 200, 250), Color.Transparent, Color.Blue, 0, False)
gr.FillRectangle(lgb, New Rectangle(0, 0, 250, 250))
End Using

Using borderpen As New Pen(Brushes.DarkCyan)
gr.DrawRectangle(borderpen, New Rectangle(0, 0, imageWidth - 1, imageHeight - 1))
End Using
gr.Dispose()

' إستخدام الصورة كما يحلو لنا
Me.BackgroundImage = bmp
Me.BackgroundImageLayout = Windows.Forms.ImageLayout.Center

End Sub
كيف نرسم ColorPicker

الأن وبدلا من ان نرسم صورة تحتوي علي رسومات عشوائية كما في المثال الثاني أعلاه لنحاول أن نرسم صورة لها شكل واضح قليلا وهي ستكون صورة تمثل ColorPicker والكود التالي يوضح ذلك. ستلاحظ عزيزي القارئ من الكود أدناه والموجود في المثال الثالث أننا قمنا بتعريف مصفوفة للألوان ثم رسمنا مجموعة من المربعات ثم ملأنا كل مربع بلون ما في مصفوقة الألوان وبالتالي سنحصل علي صورة شبيهة بأي ColorPicker ثم في الحدث Paint قمنا برسم هذه الصورة علي الفورم

المثال الثالث :


كود :
Public Class Form1

Private colors As Color(,)
Private pickerRect As Rectangle = Rectangle.Empty
Private bufferImage As Bitmap = Nothing

Private Sub CreateColors()

colors = New Color(5, 7) {}

colors(0, 0) = Color.White
colors(1, 0) = Color.FromArgb(224, 224, 224)
colors(2, 0) = Color.Silver
colors(3, 0) = Color.Gray
colors(4, 0) = Color.FromArgb(64, 64, 64)
colors(5, 0) = Color.Black

colors(0, 1) = Color.FromArgb(255, 192, 192)
colors(1, 1) = Color.FromArgb(255, 128, 128)
colors(2, 1) = Color.Red
colors(3, 1) = Color.FromArgb(192, 0, 0)
colors(4, 1) = Color.Maroon
colors(5, 1) = Color.FromArgb(64, 0, 0)

colors(0, 2) = Color.FromArgb(255, 224, 192)
colors(1, 2) = Color.FromArgb(255, 192, 128)
colors(2, 2) = Color.FromArgb(255, 128, 0)
colors(3, 2) = Color.FromArgb(192, 64, 0)
colors(4, 2) = Color.FromArgb(128, 64, 0)
colors(5, 2) = Color.FromArgb(128, 64, 64)

colors(0, 3) = Color.FromArgb(255, 255, 192)
colors(1, 3) = Color.FromArgb(255, 255, 128)
colors(2, 3) = Color.Yellow
colors(3, 3) = Color.FromArgb(192, 192, 0)
colors(4, 3) = Color.Olive
colors(5, 3) = Color.FromArgb(64, 64, 0)

colors(0, 4) = Color.FromArgb(192, 255, 192)
colors(1, 4) = Color.FromArgb(128, 255, 128)
colors(2, 4) = Color.Lime
colors(3, 4) = Color.FromArgb(0, 192, 0)
colors(4, 4) = Color.Green
colors(5, 4) = Color.FromArgb(0, 64, 0)

colors(0, 5) = Color.FromArgb(192, 255, 255)
colors(1, 5) = Color.FromArgb(128, 255, 255)
colors(2, 5) = Color.Cyan
colors(3, 5) = Color.FromArgb(0, 192, 192)
colors(4, 5) = Color.Teal
colors(5, 5) = Color.FromArgb(0, 64, 64)

colors(0, 6) = Color.FromArgb(192, 192, 255)
colors(1, 6) = Color.FromArgb(128, 128, 255)
colors(2, 6) = Color.Blue
colors(3, 6) = Color.FromArgb(0, 0, 192)
colors(4, 6) = Color.Navy
colors(5, 6) = Color.FromArgb(0, 0, 64)

colors(0, 7) = Color.FromArgb(255, 192, 255)
colors(1, 7) = Color.FromArgb(255, 128, 255)
colors(2, 7) = Color.Fuchsia
colors(3, 7) = Color.FromArgb(192, 0, 192)
colors(4, 7) = Color.Purple
colors(5, 7) = Color.FromArgb(64, 0, 64)

End Sub

Private Sub FillColorRectangle(ByVal g As Graphics, ByVal fillColor As Color, ByVal x As Integer, ByVal y As Integer)
Using sb As New SolidBrush(fillColor)
g.FillRectangle(sb, x, y, 15, 15)
g.DrawRectangle(New Pen(sb, 1), x, y, 15, 15)
End Using
End Sub

Private Sub CreateImage()
pickerRect = New Rectangle(0, 0, 90, 90)
Me.bufferImage = New Bitmap(Me.pickerRect.Width, Me.pickerRect.Height)
Dim g As Graphics = Graphics.FromImage(Me.bufferImage)
Me.CreateColors()
For i As Integer = 0 To 5
For j As Integer = 0 To 7
Me.FillColorRectangle(g, colors(i, j), j * (CSng(Me.pickerRect.Height / 8)), i * (CSng(Me.pickerRect.Width / 6)))
Next
Next
g.Dispose()
End Sub

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
Me.CreateImage()
e.Graphics.DrawImage(bufferImage, Me.pickerRect)
End Sub

End Class
من الأمثلة الثلاثة أعلاه يتضح الأتي

1- نستطيع إسترجاع الألوان من أي صورة
2- نستطيع أن نبني صورة من الصفر
3- نستطيع تخليق اي صورة لها شكل واضح بشرط أن يكون لدينا دراية بسيطة بأوامر الرسم المختلفة

في المشاركة التالية سوف نبني كونترول يعتمد علي الأفكار أعلاه أي أننا سنقوم ببناء كونترول يعتمد علي تحويل أي صورة الي ColorPicker ومن ثم نسترجع أي لون منه ومن ثم نستخدمه كيفما نشاء مثل أي ColorPicker أخر.


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


الردود في هذا الموضوع
مقال- أفكار في الدوت نت Image To ColorPicker - بواسطة Raggi Tech - 05-10-12, 06:46 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 5,865 30-07-21, 05:14 PM
آخر رد: kebboud
  مقال: الكومبو بوكس ComboBox كيف تضيف أيقونات Blue Sky 1 3,161 30-06-19, 10:41 AM
آخر رد: invocker
  التــعامل مع cmd من خلال الدوت نت مبتدئ في الاحتراف 3 3,782 02-06-18, 12:36 AM
آخر رد: YousefOkasha
  [VB.NET] ارجو المساعدة : How to Split an Image into Chunks amna jamal 2 2,156 23-01-18, 05:05 AM
آخر رد: silverlight
  أفكار في الجرافكس AlignRectangle silverlight 0 1,558 14-10-17, 02:02 PM
آخر رد: silverlight
  مقارنة صورتين و الحصول علي الفرق بينهم Comparing Two Images and Get Diff Image silverlight 0 4,899 30-06-17, 11:33 AM
آخر رد: silverlight
  تفقيط الارقام فى الدوت نت مبرمج أوتار 17 12,405 20-04-17, 12:21 PM
آخر رد: محمد بوقزاحة
  Create, Save Tiff Image & Extract Images From TIFF Image silverlight 0 2,623 09-10-15, 01:40 PM
آخر رد: silverlight
  [مقال] Check the file format of an Image silverlight 3 3,378 28-05-14, 05:02 PM
آخر رد: Sajad
  [مقال] تشغيل برمجيات الدوت نت بدون تنصيب النت فروم ويرك m0075 13 10,491 13-02-14, 08:29 PM
آخر رد: Omar Mekkawy

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


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