Zapis elementu okna WPF do pliku graficznego

By | 4 listopada 2014

Tworzyłem aplikacje, która miała za zadanie wyświetlać obraz z kamery, a użytkownik miał dodawać elementy typu wąsy, a następnie obraz miał zostać zapisany do pliku. Najprostszym sposobem na zapisanie obrazu z wąsami do pliku okazało się po prostu wy-renderowanie elementu Canvas jako bitmapa i zapis do pliku.

Użyłem tej funkcji:

public void ExportToPng(Uri path, FrameworkElement element)
{
    if (path == null) return;

    Transform transform = element.LayoutTransform;
    element.LayoutTransform = null;

    // Pobieranie rozmiaru elementu graficznego
    Size size = new Size(element.Width, element.Height);
    element.Measure(size);
    element.Arrange(new Rect(size));

    RenderTargetBitmap renderBitmap = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96d, 96d, PixelFormats.Pbgra32);
    renderBitmap.Render(element);

    // Tworzenie pliku
    using (FileStream outStream = new FileStream(path.LocalPath, FileMode.Create))
    {
        // Wybierz format pliku graficznego i odkomentuj go, ja wybrałem format PNG
        // BmpBitmapEncoder encoder = new BmpBitmapEncoder();
        // JpegBitmapEncoder encoder = new JpegBitmapEncoder();
        PngBitmapEncoder encoder = new PngBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
        encoder.Save(outStream);
    }

    element.LayoutTransform = transform;
}

Teraz wystarczy już tylko dodać kod, który będzie wywoływał zapis do pliku.


ExportToPng(new Uri("test.png"), paintCanvas);

Równie dobrze można zapisywać w ten sam sposób inne elementy ekranu jak Grid.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *