【发布时间】:2012-10-29 19:51:56
【问题描述】:
我有一些方法可以将 System.Windows.Controls.Canvas 控件转换为 .png 图像并保存在目录中。我为某些 List
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;
}
【问题讨论】:
-
你需要确保它完成了一个渲染过程......看这个......stackoverflow.com/questions/1080375/…和blogs.msdn.com/b/jaimer/archive/2009/07/03/…
-
谢谢..您提供的第二个链接对我帮助很大。从那个帖子中得到了解决方案。
-
可见区域外的相关和考虑对象:stackoverflow.com/questions/67472818/…
标签: c# wpf wpf-controls