【问题标题】:Checking to see if the color of a pixel is a predefined system color?检查像素的颜色是否是预定义的系统颜色?
【发布时间】:2013-03-06 20:00:00
【问题描述】:

在以下代码中:

    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;
            }
        }
    } 

我想检查位图中该位置的像素是否是系统绘制颜色“绿色”,但它永远不会返回 true。

我做错了什么?

【问题讨论】:

  • System.Drawing.Color.FromArgb(0x40, 0, 0xff, 0) == bmp.GetPixel(i,j).IsSystemColor.Equals("green"))?
  • 我认为您的 PixelFormat 不匹配,这就是颜色值不匹配的原因。 “某些像素格式包含预乘颜色值。预乘意味着颜色值已经乘以 alpha 值。” msdn.microsoft.com/en-GB/library/…
  • 这个链接可以给你一些线索...stackoverflow.com/questions/8104461/…

标签: c# bitmap getpixel


【解决方案1】:

我不确定您为什么需要将green 与系统颜色进行比较。 IsSystemColor 返回 bool

但这应该可行。

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

或者(我真的认为这就是你想要的)

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

【讨论】:

  • 嘿!这样做!谢谢你,谢谢你,谢谢你!我不知道“绿色”是在某个地方定义的。谢谢!
  • @zetar - 您将green 定义为Color - System.Drawing.Color green = System.Drawing.Color.FromArgb(0x40, 0, 0xff, 0); 类型的局部变量。你可以叫它donut,它的意思是一样的。
猜你喜欢
  • 2022-06-13
  • 2018-11-22
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
相关资源
最近更新 更多