SilverlightWPF 截图保存功能的实现

SilverlightWPF 截图保存功能的实现,第1张

概述图片的截取和压缩主要通过WriteableBitmap 这个类实现的,对它进行相应的变换就可以实现截取和压缩。 由WriteableBitmap转换成byte我调用了FluxJpeg这个三方的。   这个在博客园上有很多说明,在博客园上搜索“FluxJpeg”就可以找的到 using System.IO;using System.Windows;using System.Windows.Con

图片的截取和压缩主要通过WriteableBitmap 这个类实现的,对它进行相应的变换就可以实现截取和压缩。 由WriteableBitmap转换成byte我调用了FluxJpeg这个三方的。

  这个在博客园上有很多说明,在博客园上搜索“FluxJpeg”就可以找的到

using System.IO;using System.windows;using System.windows.Controls;using System.windows.Media;using System.windows.Media.Imaging;namespace SinoChemBI.Tools{    public class Imagetools    {        #region 将内容保存为图片        /// <summary>        /// 将内容保存为图片        /// </summary>        /// <param name="_UIElement">控件</param>        /// <returns>true:成功;false:失败</returns>        public bool? PrintScreen(UIElement _UIElement)        {            try            {                //截图                  WriteableBitmap wBitmap = new WriteableBitmap(_UIElement,new Matrixtransform());                Image img = new Image();                //img.WIDth = 450;                //img.margin = new Thickness(2);                img.source = wBitmap;                //保存图片                  if (wBitmap == null)                {                    return false;                }                SavefileDialog saveDlg = new SavefileDialog();                saveDlg.Filter = "JPEG files (*.jpeg)|*.jpeg";                saveDlg.DefaultExt = ".jpeg";                if (!(bool)saveDlg.ShowDialog())                {                    return null;                }                using (Stream fs = saveDlg.Openfile())                {                    savePicTofile(wBitmap,fs);                    return true;                }            }            catch (System.Exception ex)            {                return false;            }        }        private voID savePicTofile(WriteableBitmap bitmap,Stream fs)        {            int wIDth = bitmap.PixelWIDth;            int height = bitmap.PixelHeight;            int bands = 3;            byte[][,] raster = new byte[bands][,];  //用来保存bitmap中每个像素点的RGB分量的数组            for (int i = 0; i < bands; i++)            {                raster[i] = new byte[wIDth,height];            }            for (int row = 0; row < height; row++)            {                for (int column = 0; column < wIDth; column++)                {                    int pixel = bitmap.Pixels[wIDth * row + column];                    raster[0][column,row] = (byte)(pixel >> 16);  //R                    raster[1][column,row] = (byte)(pixel >> 8);   //G                    raster[2][column,row] = (byte)pixel;          //B                }            }            FluxJpeg.Core.colorModel model = new FluxJpeg.Core.colorModel { colorspace = FluxJpeg.Core.colorSpace.RGB };            FluxJpeg.Core.Image img = new FluxJpeg.Core.Image(model,raster);            //使用jpeg编码方式            MemoryStream stream = new MemoryStream();            FluxJpeg.Core.Encoder.JpegEncoder encoder = new FluxJpeg.Core.Encoder.JpegEncoder(img,100,stream);            encoder.Encode();            //回到stream的起始            stream.Seek(0,SeekOrigin.Begin);            //读取stream中的内容放入binaryData中,然后通过fs参数写到本地磁盘上,图片保存完成。            byte[] binaryData = new byte[stream.Length];            long bytesRead = stream.Read(binaryData,(int)stream.Length);            fs.Write(binaryData,binaryData.Length);        }        #endregion    }}
总结

以上是内存溢出为你收集整理的Silverlight/WPF 截图保存功能的实现全部内容,希望文章能够帮你解决Silverlight/WPF 截图保存功能的实现所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1018266.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存