Здравствуйте!
Есть Canvas (WPF), заполняемый в процессе работы программы (в том числе изменяется и размер). Стоит задача экспортировать его в файл BMP/PNG.
Гугл помог найти несколько вариантов решения, но все они приводят к получению черного BMP файла или прозрачного PNG файла (замечу, что фон Canvas'a задан белым).
Например, код:
public static void SaveCanvasToFile(Canvas surface, string filename)
{
// Save current canvas transform
//Transform transform = surface.LayoutTransform;
// reset current transform (in case it is scaled or rotated)
surface.LayoutTransform = null;
// Get the size of canvas
Size size = new Size(surface.Width, surface.Height);
// Measure and arrange the surface
// VERY IMPORTANT
surface.Measure(size);
surface.Arrange(new Rect(size));
surface.UpdateLayout();
// Create a render bitmap and push the surface to it
RenderTargetBitmap renderBitmap =
new RenderTargetBitmap(
(int)size.Width,
(int)size.Height,
96d,
96d,
PixelFormats.Pbgra32);
renderBitmap.Render(surface);
// Create a file stream for saving image
using (FileStream outStream = new FileStream(filename, FileMode.Create))
{
// Use png encoder for our data
BmpBitmapEncoder encoder = new BmpBitmapEncoder();
// push the rendered bitmap to it
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
// save the data to the stream
encoder.Save(outStream);
}
}
Что я делаю не так и что можно предпринять?