我们有一个winforms应用程序(Framework v4),它在屏幕上显示一个图像(通过PictureBox),并允许选择该图像上的矩形区域。在图像选择期间和之后,我们显示所选区域的边界。目前通过DrawRectangle
电话完成此操作。
问题是如何选择这个矩形的颜色。无论选择何种颜色,它总是可以融入背景(图像)。 Microsoft绘制通过在“选择矩形”上动态反转颜色来处理这一点。这非常适合我们的应用程序,但我不知道如何在winforms中执行此操作。
我也环顾四周,看看是否有一种可以使用两种颜色的破折号样式(这样我可以指定黑白作为这些颜色,无论背景颜色是什么都可以看到),但是我找不到这种东西。
提前感谢所有帮助。
答案 0 :(得分:2)
您可以使用ControlPaint
方法绘制可逆矩形/框架
ControlPaint.FillReversibleRectangle
MSDN
和
ControlPaint.DrawReversibleFrame
MSDN
这里有一个小伪代码方法示例
private void DrawReversibleRectangle(int x, int y) {
// Hide the previous rectangle by calling the methods with the same parameters.
var rect = GetSelectionRectangle(this.PointToScreen(this.reversibleRectStartPoint), this.PointToScreen(this.reversibleRectEndPoint));
ControlPaint.FillReversibleRectangle(rect, Color.Black);
ControlPaint.DrawReversibleFrame(rect, Color.Black, FrameStyle.Dashed);
this.reversibleRectEndPoint = new Point(x, y);
// Draw the new rectangle by calling
rect = GetSelectionRectangle(this.PointToScreen(this.reversibleRectStartPoint), this.PointToScreen(this.reversibleRectEndPoint));
ControlPaint.FillReversibleRectangle(rect, Color.Black);
ControlPaint.DrawReversibleFrame(rect, Color.Black, FrameStyle.Dashed);
}
答案 1 :(得分:1)
你提到另一种解决方案是画一条黑色和白色两种颜色的虚线,这样它就可以在任何背景上看到。
通过用一种颜色(例如黑色)绘制实线来伪造,然后用另一种颜色(例如白色)画一条虚线。
的想法和代码using (Pen pen1 = new Pen(Color.Black, 2))
{
e.Graphics.DrawRectangle(pen1, rect);
}
using (Pen pen2 = new Pen(Color.White, 2))
{
pen2.DashPattern = new float[] { 5, 5 };
e.Graphics.DrawRectangle(pen2, rect);
}