How to determine the disabled color for a given color in winforms?

On Windows forms, there is a convenient ControlPaint.DrawImageDisabled for drawing a color image in the disabled state. Is there a way to define for a specific color what the disabled color would be (as if it were drawn by DrawImageDisabled)?

+3
source share
1 answer

Reflector tells us that this is the code that creates the used ColorMatrix:

// 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;
}
+3
source

Source: https://habr.com/ru/post/1711669/


All Articles