Geçtiğimiz günlerde renk ve parlaklık değerlerine bağlı olarak bir .NET renk şemasıyla karşılaştım. Bana inme, çılgın gri tonlamalı grafik. Örneğin, DarkGray aslında daha açık gri mi? Ayrıca, rgb değerlerinin derecelendirilmesinde herhangi bir mantık göremiyorum, 0'dan 105 ila 128'ye gider?GrayScaleBrushes sınıfı oluşturma
GrayScaleBrushes.Pct05
GrayScaleBrushes.Pct10
GrayScaleBrushes.Pct15
..all the way to.Pct95
...
ie: e.FillRectangle(GrayScaleBrushes.Pct05, exampleRect);
Nasıl yapmalı:
0 : Black
105 : DimGray
128 : Gray
169 : DarkGray!
192 : Silver
211 : LightGray
220 : Gainsboro
245 : Ghostwhite
255 : White
http://sites.google.com/site/cdeveloperresources/
İstediğim tam olarak olduğu gibi Fırçalar sınıf gibi davranır, ancak benim özel şeması ile GrayScaleBrushes sınıftır Bu, fırçaların doğru şekilde atıldığından emin olmak?
Düzenleme: .NET Fırçaları sınıfı aşağıdaki gibi görünür (yansıtıcı kullanılarak demonte edilir).
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, bana erişilemez gibi görünüyor. Bir SolidBrush'ı statik bir yöntemle döndürdüğümü varsayalım, bu herşeyin doğru şekilde atılmasını sağlar mı? (Ve bu nasıl test?)
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);
}
}
"DarkGray> Gray" nedeniyle, bkz .: Wikipedia: http://en.wikipedia.org/wiki/X11_color_names#Color_names_that_clash_between_X11_and_HTML.2FCSS –