2015-10-20 4 views
0

Я хочу нарисовать картинку с помощью Canvas в C#. Я должен контролировать цвет каждого пикселя изображения, поэтому я рисую его с помощью Rectangle.Почему я не могу рисовать пиксель по бокам?

public void AddPixel(Canvas canvas, double x, double y) 
    { 
     Rectangle rec = new Rectangle(); 
     Canvas.SetTop(rec, y); 
     Canvas.SetLeft(rec, x); 
     rec.Width = 1; 
     rec.Height = 1; 
     rec.Fill = new SolidColorBrush(Colors.Black); 
     canvas.Children.Add(rec); 
    } 

Это должно работать, но когда я хочу, чтобы проверить его и сделать просто черную картинку:

for (int y = 0; y < 50; y++) 
     { 
      for (int x = 0; x < 50; x++) 
      { 
       AddPixel(MandelbrotCanvas, x, y); 
      } 
     } 

я получаю что-то вроде этого - прямоугольники с чем-то, как границы, пространство между пикселями:

enter image description here

Почему? Кто-то может помочь мне нарисовать черную картину?

+0

Возможно, это связано с передачей '5' вместо' y' методу 'AddPixel'? – BradleyDotNET

+0

Я скопировал неправильный код. Это изображение, которое я получаю, когда использую AddPixel (..., x, y) – Blagalin

+2

Попробуйте добавить это: 'rec.SetValue (RenderOptions.EdgeModeProperty, EdgeMode.Aliased);'. Если это не сработает, попробуйте добавить 'rec.SnapsToDevicePixels = true;' – cubrr

ответ

1

Вашего изображение показывает, что там, кажется, некоторый уровень supersampling (метод пространственного сглаживания) на месте. Ваша 1px широкая линия становится мягче, чем есть на самом деле. Сглаживание помогает рисовать линии, которые не выглядят «пиксельными».

Supersampled линия (увеличено):

Anti-aliased line

Связанный линия:

Aliased line

RenderOptions.EdgeModeProperty Установите, чтобы убедиться, что ваши прямоугольники не сглаживаются:

rec.SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased); 

Если это не сработает, попробуйте добавить настройки UIElement.SnapsToDevicePixels свойства:

rec.SnapsToDevicePixels = true; 

Я бы предположил, что это мешает subpixel rendering ваших прямоугольники.

0

Это один помогает мне

rec.SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Aliased); 
Смежные вопросы