sharpc (sharpc) wrote,
sharpc
sharpc

  • Music:

System.Drawing.Color наглядно

Названия статических свойств класса System.Drawing.Color не очень наглядны, поэтому решено было их все изобразить на одной картинке в алфавитном порядке:



Если надо решить обратную задачу: по цвету подобрать название, удобнее пользоваться этой картинкой (тоже кликабельно):



А если кто хочет сделать похожую штуку, но только БШ, сырцы под катом.


// Свойства System.Drawing.Color
Type type = typeof(System.Drawing.Color);
var cols = type.GetProperties().Where(x => x.PropertyType == type && x.Name != "Transparent");
int cn = cols.Count();

// Размеры прямоугольников
int W = 1280, H = 800;
double phi = (Math.Sqrt(5) + 1) / 2;
int sx = (int) Math.Round(cn / Math.Sqrt(cn / (W / phi / H))),
    sy = cn / sx + (cn % sx == 0 ? 0 : 1);
int shiftX = (W % sx) / 2, shiftY = (H % sy) / 2;

// Подготовка рисования
Font tahoma = new Font("Tahoma", W <= 800 ? 7 : 8);
Bitmap bmp = new Bitmap(W, H);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.Black);

// Рисование
int i = 0;
foreach (var pi in cols)
{
    Color col = (Color) pi.GetValue(null, null);
    // Прямоугольник
    g.FillRectangle(
        new SolidBrush(col),
        new Rectangle(
            shiftX + (i / sy) * (W / sx) + 1,
            shiftY + (i % sy) * (H / sy) + 1,
            W / sx - 1,
            H / sy - 1
        )
    );
    // Подпись
    string rgb = "#" + col.ToArgb().ToString("X").Substring(2);
    g.DrawString(
        rgb + "\r\n" + pi.Name,
        tahoma,
        col.GetBrightness() < 0.4 || col.A < 100 ? Brushes.White : Brushes.Black,
        shiftX + (i / sy) * (W / sx) + 5f,
        shiftY + (i % sy) * (H / sy) + 5f
    );
    ++i;
}

// Копирайт :)
System.Net.WebClient wc = new System.Net.WebClient();
byte[] lj = wc.DownloadData("http://l-stat.livejournal.com/img/userinfo.gif");
g.DrawImage(
    Image.FromStream(new System.IO.MemoryStream(lj)),
    shiftX + (sx - 1) * (W / sx) + 5f,
    shiftY + (sy - 1) * (H / sy) + 5f
);
g.DrawString("sharpc", tahoma, Brushes.White,
    shiftX + (sx - 1) * (W / sx) + 24f,
    shiftY + (sy - 1) * (H / sy) + 8f
);

// Сохранение и просмотр
bmp.Save("C:\\System_Drawing_Color.png", System.Drawing.Imaging.ImageFormat.Png);
System.Diagnostics.Process.Start("C:\\System_Drawing_Color.png");

Tags: программирование
Subscribe

  • Инфраструктура Python

    В ноябре 2017 я начал собирать в виде IPython Notebook сниппеты работы с разными полезными для исследовательского программирования библиотеками…

  • Теормин по STL для СП, часть 2/2

    Это продолжение части 1. <algorithm>В STL реализованы некоторые простые и часто используемые обобщенные алгоритмы. Обобщенные они потому,…

  • Теормин по STL для СП, часть 1/2

    Это теоретический минимум по STL для занимающихся спортивным программированием, подмножество возможностей стандартной библиотеки C++, полезных для…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 10 comments

  • Инфраструктура Python

    В ноябре 2017 я начал собирать в виде IPython Notebook сниппеты работы с разными полезными для исследовательского программирования библиотеками…

  • Теормин по STL для СП, часть 2/2

    Это продолжение части 1. <algorithm>В STL реализованы некоторые простые и часто используемые обобщенные алгоритмы. Обобщенные они потому,…

  • Теормин по STL для СП, часть 1/2

    Это теоретический минимум по STL для занимающихся спортивным программированием, подмножество возможностей стандартной библиотеки C++, полезных для…