最近我遇到了一個基於色調和亮度值的.NET顏色圖表。什麼讓我感到瘋狂的灰度圖。例如,DarkGray實際上比Gray更輕?另外,我看不到rgb值漸變中的任何邏輯,它從0到105到128?建立一個GrayScaleBrushes類
0 : Black
105 : DimGray
128 : Gray
169 : DarkGray!
192 : Silver
211 : LightGray
220 : Gainsboro
245 : Ghostwhite
255 : White
http://sites.google.com/site/cdeveloperresources/
我要的是一個GrayScaleBrushes類的行爲完全與Brushes類一樣,但我自定義的配置,如:
GrayScaleBrushes.Pct05
GrayScaleBrushes.Pct10
GrayScaleBrushes.Pct15
..all the way to.Pct95
...
ie: e.FillRectangle(GrayScaleBrushes.Pct05, exampleRect);
怎麼辦確保刷子能正確處理?
編輯: .NET筆刷類如下所示(使用反射器反彙編)。
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);
}
}
至於原因`深灰> Gray`,請參見維基百科:http://en.wikipedia.org/wiki/X11_color_names#Color_names_that_clash_between_X11_and_HTML.2FCSS – 2011-01-10 20:52:13