保存WPF位图效果结果图像 [英] Saving WPF bitmap effect resultant image
本文介绍了保存WPF位图效果结果图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个图像要显示在页面中,然后对图像应用一些视觉效果.例如,斜角效果.成功应用效果后,是否可以保存生成的图像?
I have a image to be displayed in the page and then apply some visual effects to the image. e.g Bevel effect. Once the effect is applied successfully is there a way to save the resultant image?
推荐答案
您可以执行以下操作
private void SaveImage()
{
try
{
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.Filter = "JPeg Image(*.JPG)|*.jpg|Bitmap Image(*.BMP)|*.bmp|Png Image(*.PNG)|*.png|Gif Image(*.GIF)|*.gif";
if (saveDialog.ShowDialog().Value == true)
{
// Save current canvas transform
Transform transform = img.LayoutTransform;
// reset current transform (in case it is scaled or rotated)
img.LayoutTransform = null;
// Get the size of canvas
Size size = new Size(img.ActualWidth, img.ActualHeight);
// Measure and arrange the surface
// VERY IMPORTANT
img.Measure(size);
img.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.Default);
renderBitmap.Render(img);
BitmapEncoder encoder = new BmpBitmapEncoder();
string extension = saveDialog.FileName.Substring(saveDialog.FileName.LastIndexOf('.'));
switch (extension.ToLower())
{
case ".jpg":
encoder = new JpegBitmapEncoder();
break;
case ".bmp":
encoder = new BmpBitmapEncoder();
break;
case ".gif":
encoder = new GifBitmapEncoder();
break;
case ".png":
encoder = new PngBitmapEncoder();
break;
}
// push the rendered bitmap to it
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
// Create a file stream for saving image
using (FileStream fs = File.Open(saveDialog.FileName, FileMode.OpenOrCreate))
{
encoder.Save(fs);
}
// Restore previously saved layout
img.LayoutTransform = transform;
}
}
catch (Exception)
{
throw;
}
}
这篇关于保存WPF位图效果结果图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文