在 FillRectangles 之后获取 Rectangle 的颜色
Get Rectangle's color after FillRectangles
创建 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] =
....
有可能得到这个吗?它应该 return Color.Red
.
FillRectangles 使用您传递的画笔(颜色)绘制矩形。没有从任何矩形到任何颜色的引用。它只是对 Graphics
对象执行绘图命令。
矩形没有颜色。 所以,不,你不能。如果您解释了为什么需要它,可能还有其他解决方案可以获得所需的结果。
您可以找到矩形中心像素的位置,然后您可以使用 GetPixel
方法获取颜色等信息。
Color pixelColor = myBitmap.GetPixel(50, 50);
您可以写一个新的 Class,例如:
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);
设置矩形颜色
如果存储图像,则只存储结果(即像素网格)。没有关于您如何创建此图像的信息。
例如仅基于位图图像,您无法区分两个相邻的正方形(new Rectangle(0, 0, 15, 15), new Rectangle(15, 0, 15, 15)
和宽度是其两倍的矩形 (new Rectangle(0, 0, 30, 15)
)。
所以对你的问题的简短回答是否定的,你不能那样做。
除非你单独存储你的信息(你画的矩形),然后用它来找到图像上合适的像素(这只适用于简单的情况 - 如果你重叠了一个较早的矩形,那将是不可能的)
但是如果你无论如何都要存储矩形信息,你最好存储它的颜色,这样你就不需要再对图像进行逆向工程了。所以答案仍然是你不能仅根据图像来做到这一点。
创建 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] =
....
有可能得到这个吗?它应该 return Color.Red
.
FillRectangles 使用您传递的画笔(颜色)绘制矩形。没有从任何矩形到任何颜色的引用。它只是对 Graphics
对象执行绘图命令。
矩形没有颜色。 所以,不,你不能。如果您解释了为什么需要它,可能还有其他解决方案可以获得所需的结果。
您可以找到矩形中心像素的位置,然后您可以使用 GetPixel
方法获取颜色等信息。
Color pixelColor = myBitmap.GetPixel(50, 50);
您可以写一个新的 Class,例如:
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);
如果存储图像,则只存储结果(即像素网格)。没有关于您如何创建此图像的信息。
例如仅基于位图图像,您无法区分两个相邻的正方形(new Rectangle(0, 0, 15, 15), new Rectangle(15, 0, 15, 15)
和宽度是其两倍的矩形 (new Rectangle(0, 0, 30, 15)
)。
所以对你的问题的简短回答是否定的,你不能那样做。
除非你单独存储你的信息(你画的矩形),然后用它来找到图像上合适的像素(这只适用于简单的情况 - 如果你重叠了一个较早的矩形,那将是不可能的)
但是如果你无论如何都要存储矩形信息,你最好存储它的颜色,这样你就不需要再对图像进行逆向工程了。所以答案仍然是你不能仅根据图像来做到这一点。