像工具MS Paint C#一样的矩形选择

时间:2014-09-02 03:00:42

标签: c# selection paint

我一直致力于创建类似于MS Paint的程序。我有几个功能,但目前给我带来麻烦的是矩形选择工具。我的程序当前在面板上绘制所有内容并将其全部保存在ArrayList中,因此每个形状都可以在Paint()中重绘。

与MS绘画一样,我希望用户能够在面板上选择绘图的一部分,然后复制,移动,重新调整大小,甚至删除它。我正在考虑让用户画一个矩形和一个保存信息。然后获取矩形的信息,传递它们以创建新的位图。然后我会在背景颜色中绘制一个新的矩形,以显示移动所选部分时所选区域被“移除”的外观。听起来没问题,直到我意识到我无法在传递给Paint()的PaintEventArgs变量上使用Graphics.FromImage(),这使得我的想法毫无用处。不确定这是否有意义,所以我很抱歉,如果这是一个令人困惑的混乱。

我一直在互联网上寻求一些帮助,但我没有找到太多帮助,所以这很容易做到,非常困难,或者“矩形选择工具”不是正确的术语。任何帮助或指针将不胜感激!!!感谢您的时间! :)

1 个答案:

答案 0 :(得分:0)

我知道您确实拥有Rectangle,现在想要从您的Panel中复制一个区域。

这是可能的,假设您已经将所有绘画放在Paint的{​​{1}}事件中。

然后你可以使用PanelDrawToBitmap将自己吸引到新的Panel上;从那里,您可Bitmap DrawImageRectangle

注意:为此要与您的“绘画动作”列表集成。您必须现在存储Panel或存储Bitmap并重做整个操作。

Rectangle

除此之外:请替换被新using (Graphics G = panelCanvas.CreateGraphics() ) { Rectangle R0 = new Rectangle(22,22,55,55); // your Rectangle! using (Bitmap bmp = new Bitmap(panelCanvas.ClientSize.Width, panelCanvas.ClientSize.Height)) { panelCanvas.DrawToBitmap(bmp, panelCanvas.ClientRectangle); G.DrawImage(bmp, 111f, 111f, R0, GraphicsUnit.Pixel); } } 取消的ArrayList,例如一个List<T>或你班级的名字!

如果您只想从Panel Control中提取rectanglular区域,可以使用thsi函数:

List<PaintAction>