2013-01-14 86 views
0

我正在嘗試構建一個應用程序,該應用程序顯示的圖片最初使用純色(黑色)覆蓋。這個想法是,當我點擊黑色屏幕上的某個地方(最初)時,我點擊的黑色像素周圍的圓形區域變得透明,因此我可以看到背後的圖像。顯示覆蓋純色的圖片

我想出的解決方案是使用畫布和我想要覆蓋的圖片作爲背景。黑色封面將以像素分割(存儲在矩陣上 - 圖像最大爲500x500)。所有這些像素最初都會被染成黑色,然後知道用戶單擊的像素會使該像素周圍的所有像素透明(或刪除),直到我清除具有預設直徑的圓形區域。

我對畫布沒有太多的經驗,這個解決方案對我來說似乎相當粗糙。我想問第二個意見,或者如果有人可以給我一個更好的解決方案

我正在Silverlight中開發應用程序,如果這是相關的。

謝謝!

+0

是的!我想說,這與你在Silverlight中開發非常相關。 XAML具有一些非常強大的圖像處理功能。您可以使用不透明蒙版來指定您希望顯示的圖片的哪一部分。此外,silverlight能夠使用您的GPU,您需要明確指定。 – flup

+0

只需製作一個非常大的png,並在中心有一個鏤空圈。將png覆蓋在其他圖像上,但一定要將切口放置在視口外。然後點擊,將png剪切圓圈移動到用戶點擊的位置。所有你需要做的就是計算剪切位置到點擊位置......或者如果你有興趣揭示越來越多的圖像部分,然後使用flup的建議:http://msdn.microsoft.com /en-us/library/ms743320.aspx – evasilchenko

+0

我找到了一個例子:http://silverscratch.blogspot.nl/2010/03/animating-silverlight-opacity-mask.html特別是刻錄代碼,我想。您希望做出與燒傷相反的效果,讓用戶操作而不是計算。 – flup

回答

0

經過一段時間,我花了一些時間閱讀關於silverlight控件的知識,最後我使用了Image.Clip。這裏有一個例子,以防像我這樣的人需要它:

<Image Source="Images/img.jpg" Width="150" Height="150" Canvas.Left="30" Canvas.Top="19">             
      <Image.Clip> 
       <GeometryGroup FillRule="Nonzero"> 
        <EllipseGeometry RadiusX="20" RadiusY="20" Center="100,100"></EllipseGeometry> 
        <EllipseGeometry RadiusX="20" RadiusY="20" Center="80,100"></EllipseGeometry> 
        <EllipseGeometry RadiusX="20" RadiusY="20" Center="80,83"></EllipseGeometry>       
        <EllipseGeometry RadiusX="20" RadiusY="20" Center="60,60"></EllipseGeometry> 
       </GeometryGroup> 
      </Image.Clip> 
     </Image>  

當然,橢圓可以放在程序化。