SoptikHa
SoptikHa

Reputation: 467

WPF - Create and draw image on canvas

I have WPF canvas. And I need to draw up to half million pixels with different color. I've tried to draw pixel-by-pixel, but it was incredibly slow. So I've decided to create Image and draw it. I don't know, if it's the best way how to do it, so if you know better way, tell me.

So my question is, how can I create and draw image to canvas? I've searched, but I wasn't able to find anything.

I have two dimensional array of colors and I need to draw them, probably via an image, so how can I do it?

Thanks, Soptik

EDIT: Now, I use this code, but it takes seconds to draw even 100*100 pixels.

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);
    }

Upvotes: 1

Views: 3627

Answers (1)

Rinktacular
Rinktacular

Reputation: 1136

Using your current method is not "bad." It might be slow due to the massive size of the 2d array you have, but looping through two for loops is normal for this process. Some potential solutions could be loading each row as a rect onto your Canvas to show the image being processed, but if that is not necessary than I would investigate how to handle the pixel data and possibly processing more than one at time.

This Question is similar to yours and might help

Upvotes: 1

Related Questions