Создание класса GrayScaleBrushes

Недавно я наткнулся на цветовую диаграмму .NET, основанную на их значениях оттенка и яркости. Что меня поразило, так это сумасшедшая диаграмма оттенков серого. Например, DarkGray действительно светлее, чем Gray? Кроме того, я не вижу никакой логики в градации значений RGB, она идет от 0 до 105 и 128?

0   : Black
105 : DimGray 
128 : Gray
169 : DarkGray!
192 : Silver
211 : LightGray 
220 : Gainsboro
245 : Ghostwhite
255 : White

http://sites.google. com / site / cdeveloperresources /

color chart - see link above

Мне нужен класс GrayScaleBrushes, который ведет себя точно так же, как класс Brushes, но с моей настраиваемой схемой, например:

GrayScaleBrushes.Pct05
GrayScaleBrushes.Pct10
GrayScaleBrushes.Pct15
..all the way to.Pct95
...
ie: e.FillRectangle( GrayScaleBrushes.Pct05, exampleRect );

Как это сделать, чтобы убедиться, что кисти будут размещены правильно?

Редактировать: Класс .NET Brushes выглядит следующим образом (разобран с помощью отражателя).

public sealed class Brushes
{
    // Fields
    private static readonly object AliceBlueKey = new object();

    // Methods
    private Brushes()
    {
    }

    // Properties
    public static Brush AliceBlue
    {
        get
        {
            Brush brush = (Brush) SafeNativeMethods.Gdip.ThreadData[AliceBlueKey];
            if (brush == null)
            {
                brush = new SolidBrush(Color.AliceBlue);
                SafeNativeMethods.Gdip.ThreadData[AliceBlueKey] = brush;
            }
            return brush;
        }
    }
}

SafeNativeMethods кажется мне недоступным. Предположим, я только что вернул SolidBrush статическим методом, все ли будет правильно расположено? (И как это проверить?)

public sealed class GrayScaleBrushes
{
    private static SolidBrush pct05 = null;

    public static SolidBrush Pct05
    {
        get
        {
            if (pct05 == null)
            {
                int rgbVal = GetRgbValFromPct( 5 );
                pct05 = new SolidBrush(Color.FromArgb(rgbVal, rgbVal, rgbVal));
            }
            return pct05;
        }
    }

    private static int GetRgbValFromPct(int pct)
    {
        return 255 - (int)(((float)pct / 100f) * 255f);
    }
}

11
задан Daniel DiPaolo 24 June 2011 в 14:38
поделиться