我在图片框中绘制了12个带有一些坐标的矩形,现在我想在图片框中清除绘制的矩形,然后在同一个图片框中加载下一个图像。 对于绘制矩形,我使用以下代码,
> g.DrawRectangle(pen1, rect);
其中g是Graphics,pen1 = new System.Drawing.Pen(Color.Red,2F);和rect是带有x,y,宽度和高度坐标的矩形。
而且我希望我绘制的图形能够调整大小,因为我使用PosSizableRect Enum和picturebox Mousedown,mousemove和Mouseleave事件,并且我的矩形光标被更改,以便用户可以调整绘制的矩形坐标的大小。
如何在同一PictureBox中加载下一张图像之前清除PictureBox中绘制的矩形? 我尝试了以下解决方案,但对我来说没有任何作用。 g.Clear(Color.Red); ,this.Invalidate(); ,pictureBox1.Refresh(); pictureBox1.Image = NULL;和img.Dispose();
请指导我!!!我该如何进一步继续?
答案 0 :(得分:0)
您打算删除已经绘制的矩形以将图像恢复到原始状态,还是打算在图片上绘制“清晰”(即白色)矩形?
在第二种情况下,您应该使用Graphics.FillRectangle。
在第一种情况下,您需要保留原始图像的副本,并在想要消除已绘制的矩形时重新绘制它。
答案 1 :(得分:0)
您可以通过以下代码将图片框留空(完全删除):
g.FillRectangle(Brushes.Black, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
答案 2 :(得分:0)
除非您实际存储使用的图像数据,否则无法实现。除非你想用ex填充图片框。白色。我为你写了一个简单的课程来实现这个目标。
public class RestorablePictureBox : PictureBox
{
private Image _restoreImage;
private Image _restoreBackgroundImage;
protected override void OnPaint(PaintEventArgs pe)
{
if (_restoreImage != null) _restoreImage.Dispose();
if (_restoreBackgroundImage != null) _restoreBackgroundImage.Dispose();
_restoreImage = this.Image;
_restoreBackgroundImage = this.BackgroundImage;
base.OnPaint(pe);
}
public void Restore(bool fill = false)
{
if (fill)
{
if (_restoreImage != null) _restoreImage.Dispose();
if (_restoreBackgroundImage != null) _restoreBackgroundImage.Dispose();
using (var gfx = this.CreateGraphics())
{
gfx.FillRectangle(Brushes.White, 0, 0, this.Width, this.Height); // Change Brushes.White to the color you want or use new SolidBrush(Color)
}
}
else
{
if (_restoreImage != null) this.Image = _restoreImage;
if (_restoreBackgroundImage != null) this.BackgroundImage = _restoreBackgroundImage;
}
}
}