【问题标题】:WPF - Create and draw image on canvasWPF - 在画布上创建和绘制图像
【发布时间】:2017-08-07 17:35:40
【问题描述】:

我有 WPF 画布。我需要用不同的颜色绘制多达 50 万个像素。我试图逐个像素地绘制,但速度非常慢。所以我决定创建图像并绘制它。我不知道这是否是最好的方法,所以如果你知道更好的方法,请告诉我。

所以我的问题是,如何在画布上创建和绘制图像?我已经搜索过,但我找不到任何东西。

我有一个二维的颜色数组,我需要绘制它们,可能是通过图像,那么我该怎么做呢?

谢谢,Soptik

编辑:现在,我使用这段代码,但绘制 100*100 像素需要几秒钟。

for(int i = 0; i < w; i++)
{
   for(int j = 0; j < h; j++)
   {
        Draw(i, j, Brushes.Aqua);
   }

...

private void Draw(int x, int y, SolidColorBrush b)
    {
        Line l = new Line();
        l.Stroke = b;
        l.X1 = x;
        l.Y1 = y;
        l.X2 = x + 1;
        l.Y2 = y + 1;
        l.StrokeThickness = 1;
        canvas.Children.Add(l);
    }

【问题讨论】:

  • 如果您想按照您现在可能拥有的代码(我们确实需要查看一些代码),您应该尝试一次绘制多个像素。
  • 我试过这个:` for(int i = 0; i
  • 尝试将其添加到您的问题文本中,使其更易于阅读:)
  • 你做的还不错,这样画图很正常。所以,您是说绘制整个东西的时间太长,或者您希望在绘制时看到进度?
  • 检查这个answer。我没有足够的图形经验来为您提供更多信息,但乍一看,您正在做的事情并不是应该做的事情。

标签: c# wpf image canvas


【解决方案1】:

使用您当前的方法还不错。由于您拥有的 2d 数组的巨大大小,它可能会很慢,但循环通过两个 for loops 对于此过程来说是正常的。一些潜在的解决方案可能会将每一行作为rect 加载到您的Canvas 上以显示正在处理的图像,但如果这不是必需的,那么我将研究如何处理像素数据并可能一次处理多个。

This Question is similar to yours and might help

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 2013-07-20
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    相关资源
    最近更新 更多