2010-08-19 64 views
3

所以情况如下:我需要一个(用户指定的)图形,并允许用户在该图形中定义和标记区域。例如,如果您上传了一张脸部照片,则可能需要定义“右眼”,“左眼”,“鼻子”等。另外,如果选择了以前定义的区域,则应定义区域莫名其妙地在图像上突出显示。这些区域(显然)不一定是矩形的,并且它们不能重叠。如果您在图形中定义的区域内单击,我将能够识别哪个区域被点击。如何选择,显示和保存图形区域?

我可以考虑一些方法来做到这一点,但都不是很满意。另一位在我之前的开发人员尝试使用覆盖在原始图形上的透明网格进行操作,为突出显示区域而摆弄背景alpha/color,但我认为他们更愿意将其隐藏起来。我可以让自己的手很脏,试图清理他们的代码,或尝试一种全新的方法。

对于最大速度和用户友好性,您会有什么建议?

赏金增加:为最好的解决方案,将让我在最短的时间内运行。

回答

2

GraphicsPath类是言尽于此。随同图像一起保存它们的列表。首先绘制图像,然后使用Graphics.DrawPath()在图像顶部绘制区域。

命中测试对于GraphicsPath.IsVisible()很简单。以相反的顺序迭代列表,使重叠工作。

+0

好的,这个答案对我来说是最有用的信息,所以你得到了赏金。谢谢! :) – 2010-08-29 09:21:18

+0

啊,对 - 我以前没有在新系统下获得过赏金。感谢您的提醒! :) – 2010-08-29 11:32:59

1

假设你还没有决定使用的技术,我建议WPF;我发现WPF(至少在版本4)中大多数与图形相关的任务更容易,它专门针对交互性,所以使用鼠标单击和点击测试点击来选择形状非常容易。加载图像也很容易。但是,如果您到现在为止还没有使用过WPF或Silverlight,那么在学习基本概念和API时会有一些开销;所以我恐怕没有真正的方法,我可以推荐它作为最高速度的解决方案,而不知道你的(或谁将会在其上工作)能力。也就是说,使用MVVM和WPF对我来说绝对是最高速度的解决方案。此外,自从WPF启用了非常有趣的交互模型(如多点触控支持(这是应该提及的新潮应用,对吗?)以及简单的非标准布局和控件放置)以来,最大的用户友好性。