3
Windows窗体具有方便的ControlPaint.DrawImageDisabled,以灰色,禁用状态绘制彩色图像。有没有一种方法可以确定,对于给定的颜色,禁用的颜色是什么(就像它是由DrawImageDisabled绘制的)?如何确定winforms中给定颜色的禁用颜色?
Windows窗体具有方便的ControlPaint.DrawImageDisabled,以灰色,禁用状态绘制彩色图像。有没有一种方法可以确定,对于给定的颜色,禁用的颜色是什么(就像它是由DrawImageDisabled绘制的)?如何确定winforms中给定颜色的禁用颜色?
反射告诉我们,这是一个创建嘉洛斯是被使用的代码:
// In class-level declarations in ColorPaint
private static ImageAttributes disabledImageAttr;
// In the actual implementation method for DrawImageDisabled
if (disabledImageAttr == null)
{
float[][] newColorMatrix = new float[5][];
newColorMatrix[0] = new float[] { 0.2125f, 0.2125f, 0.2125f, 0f, 0f };
newColorMatrix[1] = new float[] { 0.2577f, 0.2577f, 0.2577f, 0f, 0f };
newColorMatrix[2] = new float[] { 0.0361f, 0.0361f, 0.0361f, 0f, 0f };
float[] numArray2 = new float[5];
numArray2[3] = 1f;
newColorMatrix[3] = numArray2;
newColorMatrix[4] = new float[] { 0.38f, 0.38f, 0.38f, 0f, 1f };
ColorMatrix matrix = new ColorMatrix(newColorMatrix);
disabledImageAttr = new ImageAttributes();
disabledImageAttr.ClearColorKey();
disabledImageAttr.SetColorMatrix(matrix);
}
// To draw the image itself
using (Bitmap bitmap = new Bitmap(image.Width, image.Height))
{
using (Graphics graphics2 = Graphics.FromImage(bitmap))
{
graphics2.DrawImage(image, new Rectangle(0, 0, size.Width, size.Height), 0, 0, size.Width, size.Height, GraphicsUnit.Pixel, disabledImageAttr);
}
graphics.DrawImageUnscaled(bitmap, imageBounds);
return;
}
谢谢!我没有想过使用反射器。 – Eric 2009-07-01 14:58:46