情况是这样的:我需要一个(用户指定的)图形,并允许用户在该图形中定义和标记区域。例如,如果您上传了一张脸的图片,您可能需要定义“右眼”、“左眼”、“鼻子”等。此外,定义了区域后,如果我选择了先前定义的区域,则应该在图像上突出显示。这些区域(显然)不一定是矩形的,它们不能重叠。如果您在图形中的定义区域内单击,我将能够识别被单击的区域。
我可以想出几种方法来做这件事,但没有一种方法是令人满意的。我之前的另一位开发人员尝试用透明的网格覆盖在原来的图形上,修改背景alpha/颜色以突出显示区域,但我认为他们已经把它拼凑起来了。我可以让我的手非常脏,试图清理他们的代码,或者尝试一种全新的方法。
你认为最大速度和用户友好的建议是什么?
Bounty补充说:是最好的解决方案,可以让我在最短的时间内启动和运行。
发布于 2010-08-23 20:56:40
GraphicsPath类就是用来做这个的。把他们的名单和图片放在一起。首先绘制图像,然后用Graphics.DrawPath()绘制图像顶部的区域。
使用GraphicsPath.IsVisible()进行命中测试很简单。按反向顺序迭代列表,以便重叠工作。
发布于 2010-08-25 15:15:31
假设您还没有决定使用哪种技术,我建议使用WPF;我发现大多数与图形相关的任务都更容易使用WPF (至少在第4版中是这样),并且它是专门针对交互性的,因此使用鼠标单击和点击测试单击来选择形状将非常容易创建非矩形区域。加载图像也很容易。
但是,如果您到目前为止还没有使用WPF或Silverlight,那么学习基本概念和API就会有一些开销;因此,我恐怕没有真正的方法可以推荐它作为一个最高速度的解决方案,而不知道您(或其他人将从事此方面的工作)能力。也就是说,使用MVVM和WPF绝对是我的最高速度解决方案。此外,最大的用户友好性,因为WPF支持非常有趣的交互模型,比如多点触摸支持(这是应该提到的流行模式,对吗?)和方便的非标准布局和布局的控制。
发布于 2010-08-22 22:10:22
你需要多边形,保存为点数列表。你需要对他们进行命中测试。请参阅链接:
http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/40ebadc1-6154-4c7c-9cb1-d608a426b29c
https://stackoverflow.com/questions/3523254
复制相似问题