保存WPF位图效果结果图像 [英] Saving WPF bitmap effect resultant image

查看:81
本文介绍了保存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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆