我一直致力于创建类似于MS Paint的程序。我有几个功能,但目前给我带来麻烦的是矩形选择工具。我的程序当前在面板上绘制所有内容并将其全部保存在ArrayList中,因此每个形状都可以在Paint()中重绘。
与MS绘画一样,我希望用户能够在面板上选择绘图的一部分,然后复制,移动,重新调整大小,甚至删除它。我正在考虑让用户画一个矩形和一个保存信息。然后获取矩形的信息,传递它们以创建新的位图。然后我会在背景颜色中绘制一个新的矩形,以显示移动所选部分时所选区域被“移除”的外观。听起来没问题,直到我意识到我无法在传递给Paint()的PaintEventArgs变量上使用Graphics.FromImage(),这使得我的想法毫无用处。不确定这是否有意义,所以我很抱歉,如果这是一个令人困惑的混乱。
我一直在互联网上寻求一些帮助,但我没有找到太多帮助,所以这很容易做到,非常困难,或者“矩形选择工具”不是正确的术语。任何帮助或指针将不胜感激!!!感谢您的时间! :)
答案 0 :(得分:0)
我知道您确实拥有Rectangle
,现在想要从您的Panel
中复制一个区域。
这是可能的,假设您已经将所有绘画放在Paint
的{{1}}事件中。
然后你可以使用Panel
让DrawToBitmap
将自己吸引到新的Panel
上;从那里,您可Bitmap
DrawImage
到Rectangle
。
注意:为此要与您的“绘画动作”列表集成。您必须现在存储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>