2010-08-19 68 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啓用了非常有趣的交互模型(如多點觸控支持(這是應該提及的新潮應用,對嗎?)以及簡單的非標準佈局和控件放置)以來,最大的用戶友好性。