在FillRectangles之后获取Rectangle的颜色

时间:2018-09-18 11:36:54

标签: c# .net rectangles getcolor

创建Rectangle后如何获得颜色?

我正在使用以下代码创建它们:

SolidBrush sb = new SolidBrush(Color.Red);
Graphics g = panel1.CreateGraphics();
Rectangle[] rects = { new Rectangle(0, 0, 15, 15), new Rectangle(16, 16, 15, 15), new Rectangle(16, 0, 15, 15), new Rectangle(0, 16, 15, 15) };
g.FillRectangles(sb,rects);

现在我想获取第三个矩形的颜色 rects[2] = ....

有可能得到这个吗?并且它应该返回Color.Red

4 个答案:

答案 0 :(得分:3)

您可以找到矩形的中心像素的位置,然后可以使用GetPixel方法来获取有关颜色等信息。

   Color pixelColor = myBitmap.GetPixel(50, 50);

答案 1 :(得分:1)

FillRectangles使用传递的画笔(颜色)绘制矩形。没有从任何矩形到任何颜色的引用。它仅对Graphics对象执行绘图命令。

矩形没有颜色。所以,不,您不能。如果您解释了为什么需要它,那么可能会有其他解决方案来获得期望的结果。

答案 2 :(得分:0)

您可以编写一个新的类,例如:

class ColorRectangles
{
    public Color color;
    public Rectangle[] rects;

    public ColorRectangle(Rectangle[] rects, Color color) : base(x, y, width, height)
    {
        this.color = color
        this.rects = rects;
    }
}

,然后使用g.FillRectangles(new SolidBrush(Rectangle.color), Rectangle.rects);

设置矩形颜色。

答案 3 :(得分:0)

如果存储图像,则仅存储结果(即像素网格)。没有有关您如何创建此图片的信息。

例如

仅根据位图图像,就无法区分两个相邻的正方形(new Rectangle(0, 0, 15, 15), new Rectangle(15, 0, 15, 15)和宽度为两倍的new Rectangle(0, 0, 30, 15)的单个矩形。

因此,对您的问题的简短回答是“否”,您不能这样做。

除非您单独存储信息(绘制的矩形),然后使用该信息在图像上找到合适的像素(而且这仅在简单情况下有效-如果您覆盖了较早的矩形,这将是不可能的)< / p>

但是,如果您仍然要存储矩形信息,则最好也存储其颜色,然后就不需要对图像进行反向工程了。因此,答案仍然是您不能仅基于图像来做到这一点