مرتب کردن رنگها بر اساس جعبه رنگ فتوشاپ یا همان مرتب سازی بر اساس نوع hue - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

مرتب کردن رنگها بر اساس جعبه رنگ فتوشاپ یا همان مرتب سازی بر اساس نوع hue

+2 امتیاز

 سلام وقت بخیر خدمت همه دوستان و سروران گرامی و با آرزوی قبولی طاعات و عبادات شما عزیزان

دوستان تیکه کد زیر رنگ یک  تصویر بیت مپی را گرفته و آن را در دیتا گریدویو نمایش میده من میخوام ترتیب این رنگها درست براساس ترتیب نمایش در جعبه رنگ فتوشاپ باشه یعنی  بر اساس الگوریتمی که فتوشاپ برای مرتب کردن رنگها از آن استفاده میکنه باشه ممنون میشم اگه از دوستان کسی بنده را راهنمایی بفرمایین

dataGridView1.Rows.Clear();
var xx = 0;
for (var i = 0; i < _bm1.Size.Width; i++)
    for (var j = 0; j < _bm1.Size.Height; j++)
    if (!_palc.ContainsKey(_bm1.GetPixel(i, j)))
    {
         var col = _bm1.GetPixel(i, j);
         _palc.Add(col, xx + 1);
         dataGridView1.Rows.Add((xx + 1).ToString());
         dataGridView1.Rows[xx].Cells[0].Style.ForeColor = Color.FromArgb(255, 255 - col.R, 255 - col.G, 255 - col.B);
         dataGridView1.Rows[xx].Cells[0].Style.BackColor = dataGridView1.Rows[xx].Cells[0].Style.SelectionBackColor =
         dataGridView1.Rows[xx].Cells[0].Style.SelectionForeColor = col;
         xx++;
    }

 

سوال شده تیر 30, 1393  بوسیله ی ada_a899a (امتیاز 35)   2 11 17

1 پاسخ

+5 امتیاز
 
بهترین پاسخ

سلام!

شما دو سوال جداگانه دارید.

یکی تبدیل RGB به یک فضای رنگی دیگر:

خوب مثلا فرض کنید شما می خواهید RGB را به HSL تبدیل کنید. می توانید از فضای نام System.Drawing استفاده کنید:

System.Drawing.Color color = System.Drawing.Color.FromArgb(red, green, blue);
float hue = color.GetHue();
float saturation = color.GetSaturation();
float lightness = color.GetBrightness();

سیستم های دیگری مثل ‌HSV و HSB هم هست که خودتان می توانید با توجه به این مقاله ی ویکی پدیا کدنویسی اش را انجام دهید:

http://en.wikipedia.org/wiki/HSL_and_HSV

همچنین می توانید از این وب سایت استفاده کنید:

http://www.rapidtables.com/convert/color/index.htm

دومی مرتب سازی:

برای مرتب سازی الگوریتم های مختلفی هست. یکی از این الگوریتم ها Quicksort نام دارد که برای استفاده از آن می توانید از متد Array.Sort استفاده کنید.

مثلا به این مثال دقت کنید:

float[] arr = { 2.3f, 1.1f, 9.0f, 6.6f, };
Array.Sort(arr, (a, b) => a.Property.CompareTo(b.Property));

برای اطلاعات بیش تر در مورد این الگوریتم:

http://en.wikipedia.org/wiki/Quicksort

و برای مقایسه الگوریتم های مختلف مرتب سازی از این مقاله ی ویکی پدیا استفاده کنید:

http://en.wikipedia.org/wiki/Sorting_algorithm

پاسخ داده شده مرداد 6, 1393 بوسیله ی مسعود لپه‌چی (امتیاز 928)   12 31 50
انتخاب شد مرداد 12, 1393 بوسیله ی ada_a899a
...