2013-07-16 2 views
0

У меня есть исходное изображение, я хочу уменьшить его до пикселей с помощью метода на http://notes.ericwillis.com/2009/11/pixelate-an-image-with-csharp/ и нарисовать каждый пиксель как заполненный круг, полый круг или квадрат (каждый фактический пиксель должен быть около 15 пикселей на экране).Рисование пикселей как пользовательских фигур

Единственный способ, которым я могу это сделать, - создать каждый пиксель как usercontrol с DependancyProperties для цвета и формы (может быть, связан с дорогой?). Родительский UC, полученный от ItemsControl, создаст сотни этих пиксельных UC внутри себя.

Это похоже на ночной кошмар.

EDIT: Чтобы создать контекст, это приложение для создания пиксельных произведений. Мне нужно хранить каждый «пиксель» в базе данных с атрибутами для X, Y и цвета.

Это лучший способ достичь этого?

+0

Почему бы вам не использовать пример растрового изображения, чтобы создать новый образ и сделать каждый пиксель, как вы хотите его , Это должно быть простым, если увеличение размера является постоянным – mao47

+0

Почему бы просто не преобразовать исходное изображение? –

+0

Не могли бы вы подробно рассказать об этих методах? В идеале я хотел бы добавить всплывающую подсказку с шестнадцатеричным кодом для каждого пикселя, поэтому просто использовать GDI + не получится. Я не совсем уверен, как создавать субпиксели. – Echilon

ответ

0

Производительность на самом деле очень впечатляет. Я использовал UserControl (корень), с 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>