我有一个源图像,我想使用http://notes.ericwillis.com/2009/11/pixelate-an-image-with-csharp/处的方法将其缩小为像素,并将每个像素绘制为实心圆,空心圆或正方形(每个实际像素应在屏幕上约为15像素) 。
我能想到这样做的唯一方法是将每个像素创建为usercontrol
,其中DependancyProperties
用于颜色和形状(绑定到路径可能?)。源自ItemsControl
的父UC将在其自身内部创建数百个这样的像素UC。
这似乎是一场表演噩梦。
编辑:为了给出一些上下文,这是一个像素艺术生成应用程序。我需要将每个'像素'存储在具有X,Y和Color属性的数据库中。
这是实现这一目标的最佳方法吗?
答案 0 :(得分:0)
性能实际上非常令人印象深刻。我使用了UserControl
(root),其中DependancyProperty
用于Sprite,ItemsControl
用于多重绑定。 MultiValueConverter
将艺术点转换为Path
元素,并考虑画布的大小:
<ItemsControl>
<ItemsControl.ItemsSource>
<MultiBinding Converter="{StaticResource dotToPixelConverter}">
<Binding Path="Sprite.Beads" ElementName="root"/>
<Binding Path="Sprite.Width" ElementName="root"/>
<Binding Path="Sprite.Height" ElementName="root"/>
<Binding Path="ActualWidth" ElementName="root"/>
<Binding Path="ActualHeight" ElementName="root"/>
</MultiBinding>
</ItemsControl.ItemsSource>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>