为什么我不能绘制像素并排像素?

时间:2015-10-20 17:28:15

标签: c# wpf canvas drawing pixel

我想在C#中使用Canvas绘制图片。 我必须控制图片的每个像素的颜色,所以我使用矩形绘制它。

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

为什么呢?有人可以帮我画一幅清晰的黑色照片吗?

2 个答案:

答案 0 :(得分:1)

您的图片显示,supersampling(一种空间抗锯齿方法)似乎已达到某种程度。您的1px宽线变得比实际更柔和。消除锯齿有助于绘制不易看的角度线和像素化的#34;。

超采样线(放大):

Anti-aliased line

别名行:

Aliased line

设置RenderOptions.EdgeModeProperty以确保您的矩形没有抗锯齿:

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

如果这不起作用,请尝试添加设置UIElement.SnapsToDevicePixels属性:

rec.SnapsToDevicePixels = true;

我想这可以防止你的矩形subpixel rendering

答案 1 :(得分:0)

这个帮助我

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