c# - 需要建议 - 如何编写绘图程序

标签 c# gdi+

我想编写一个程序,使用户能够绘制几何形状,如圆形、三角形、矩形等。

我还希望能够拖放或调整大小/移动以前绘制的形状。

  1. 我想在 Panel 中绘制形状。看起来合理吗?
  2. 我画了一个圆之后,它就变成了位图的一部分。当然,我确实将圈子的详细信息保存在其他一些对象中。

但我不明白的是如何实现以下内容:

当鼠标悬停在圆上时,圆被选中,然后使用一些键使用户能够调整大小/移动它。

我怎么知道鼠标在圆上?

我是否需要检查鼠标坐标与所有圆像素坐标?

我正在寻找更简单的解决方案。

最佳答案

使用 WPF 图形和多媒体。 http://msdn.microsoft.com/en-us/library/ms752061.aspx

Windows Presentation Foundation (WPF) 包括对高质量 2-D 和 3-D 图形、动画和媒体的支持。图形平台的主要功能包括:

矢量图形支持。

硬件加速。

分辨率和设备无关的图形。

最小的屏幕重绘和集成动画系统。

它拥有您需要的一切 - 为什么要重新发明轮子?

您需要将对象本身保留为图形对象,这样它们才能响应鼠标悬停事件。一旦将它们放入位图中,您将不得不重新发明轮子。

例如,

这是形状对象:

http://msdn.microsoft.com/en-us/library/ms747393.aspx#shapes

这是 HitTest :

http://msdn.microsoft.com/en-us/library/ms752097.aspx

您还可以获得硬件加速、分辨率和独立于设备的图形的优势。我不认为你自己能够轻松实现它:)

关于c# - 需要建议 - 如何编写绘图程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1980741/

相关文章:

c# - 将数据从 ADO.NET 绑定(bind)到 WPF

c# - 如何为 Azure Functions EventHub 监听器配置接收器批量大小?

c# - .NET 单一委托(delegate)与多播委托(delegate)

C# GDI+ 图像调整大小函数

c# - GraphicsPath.AddArc 如何使用 startAngle 和 sweepAngle 参数?

c++ - GDI+ 对象的 std::make_unique

c++ - 使用 GDI+ Graphics.DrawString 打印会产生垃圾字符

c# - Roslyn CompletionService 不返回静态扩展方法

c# - 在 WPF 中使用另一个页面上的现有 Canvas

c# - VisualStyleRenderer 到位图