Проверяете, является ли цвет пикселя предопределенным системным цветом?

В следующем коде:

    Bitmap bmp = new Bitmap((int)ArrayHeight, (int)ArrayWidth, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
    Graphics gBmp = Graphics.FromImage(bmp);
    gBmp.CompositingMode = CompositingMode.SourceCopy;
    System.Drawing.Color green = System.Drawing.Color.FromArgb(0x40, 0, 0xff, 0);
    System.Drawing.Brush greenBrush = new SolidBrush(green);
    gBmp.FillPolygon(greenBrush, polygonPoints);


    for (int i = 0; i < ArrayHeight; i++)
    {
        for (int j = 0; j < ArrayWidth; j++)
        {
            System.Drawing.Color pixel = bmp.GetPixel(i,j);

            if (pixel.IsSystemColor.Equals("green"))
            {
                PolyArray[i, j] = (byte)TerrainValue;
            }
        }
    } 

Я хочу проверить, является ли пиксель в этом месте растрового изображения зеленым цветом системного рисования, но он никогда не возвращает истину.

Что я делаю неправильно?


person zetar    schedule 06.03.2013    source источник
comment
System.Drawing.Color.FromArgb(0x40, 0, 0xff, 0) == bmp.GetPixel(i,j).IsSystemColor.Equals("green"))?   -  person Jay Walker    schedule 07.03.2013
comment
Я думаю, что в вашем PixelFormat есть несоответствие, и поэтому значения цвета не совпадают. Некоторые из форматов пикселей содержат предварительно умноженные значения цвета. Предварительное умножение означает, что значения цвета уже были умножены на альфа-значение. msdn.microsoft.com/en-GB/library/   -  person Kokulan Eswaranathan    schedule 07.03.2013
comment
Эта ссылка может дать вам некоторую подсказку ... stackoverflow.com/questions/8104461/   -  person Kokulan Eswaranathan    schedule 07.03.2013


Ответы (1)


Я не уверен, зачем вам сравнивать green с системным цветом. IsSystemColor возвращает bool.

Но это должно сработать.

if (pixel.IsSystemColor)
{
    PolyArray[i, j] = (byte)TerrainValue;
}

или (я действительно думаю, что это то, что вы хотите)

if (pixel == green)
{
    PolyArray[i, j] = (byte)TerrainValue;
}
person Daniel A. White    schedule 06.03.2013
comment
Привет! Вот и все! Спасибо Спасибо спасибо! Я понятия не имел, что «зеленый» где-то определяется. Спасибо! - person zetar; 07.03.2013
comment
@zetar - вы определили green как локальную переменную типа Color - System.Drawing.Color green = System.Drawing.Color.FromArgb(0x40, 0, 0xff, 0);. Вы могли бы назвать это donut, и это имело бы то же значение. - person Jay Walker; 07.03.2013