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.