我有一些方法可以将 System.Windows.Controls.Canvas Control 转换为 .png 图像并保存在目录中。我为某些 List <Canvas> 调用此函数,并在某个目录中获取所有图像。它工作正常,但有时此函数会随机生成一些空白图像,再次调用此函数也会完美地生成所有图像。这种故障背后的原因可能是什么?下面是函数
public bool GenerateICards(Canvas surface)
{
bool retVal = false;
try
{
// 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));
// 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(SessionHelper.Path.PrintImage, FileMode.Create, FileAccess.Write, FileShare.None))
{
// Use png encoder for our data
PngBitmapEncoder encoder = new PngBitmapEncoder();
// push the rendered bitmap to it
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
// save the data to the stream
encoder.Save(outStream);
}
// Restore previously saved layout
surface.LayoutTransform = transform;
// i++;
retVal = true;
}
//}
catch (Exception)
{
ErrorLbl = "Error occured while generating temporary images.";
}
return retVal;
}