wpf Image and Drawing.Image

本文介绍了一种在WPF应用程序中处理图片的方法,包括从网络下载图片并将其转换为不同格式,以及调整图片大小等实用功能。文章还提供了一个实用的C#类,用于实现这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

wpf 中的imge和drawing 中的iamge相互转换

 

 

 public class ImageHelper {
        private static List<string> allowableFileTypes = new List<string>();

        static ImageHelper() {
            allowableFileTypes.Clear();
            allowableFileTypes.Add(".jpg");
            allowableFileTypes.Add(".jpeg");
            allowableFileTypes.Add(".bmp");
            allowableFileTypes.Add(".png");
            allowableFileTypes.Add(".tif");
            allowableFileTypes.Add(".tiff");
            allowableFileTypes.Add(".gif");
            allowableFileTypes.Add(".wmp");
        }

        #region << _helper method >>

        public static bool SaveImageOnDisk(String originalUrl, String filename, out String errorMessage) {
            try {
                WebClient client = new WebClient();
                byte[] buffer = client.DownloadData(originalUrl);

                client.Dispose();

                //文件后缀名
                string extension = filename.LastIndexOf(".") > -1 ?
                    filename.Substring(filename.LastIndexOf(".")) : ".jpg";

                //是否在默认值中存在
                if (!allowableFileTypes.Contains(extension)) {
                    errorMessage = "The file type you picked is not supported/r/n" +
                                    "Or you didn't enter a file extension, please retry";
                    return false;
                }

                BitmapSource imageSource = CreatImage(buffer, 0, 0);
                byte[] encodedBytes = GetEncodedImageData(iamgeSource, extension);

                SaveImageData(encodedBytes, filename);
                errorMessage = String.Empty;

                return true;
            }
            catch (Exception ex) {
                errorMessage = ex.Message;
                return false;
            }
        }

        /// <summary>
        /// 将图片保存到本地
        /// </summary>
        /// <param name="data"></param>
        /// <param name="fileName"></param>
        public static void SaveImageData(byte[] data, string fileName) {
            FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write);
            BinaryWriter bw = new BinaryWriter(stream);
            bw.Write(data);
            bw.Close();
            stream.Close();
        }

        public static BitmapSource CreatImage(byte[] data, int decodePixelWidth, int decodePixelHeight) {
            if (data == null) return null;

            BitmapImage result = new BitmapImage();

            result.BeginInit();

            if (decodePixelWidth > 0) {
                result.DecodePixelWidth = decodePixelWidth;
            }

            if (decodePixelHeight > 0) {
                result.DecodePixelHeight = decodePixelHeight;
            }

            result.StreamSource = new MemoryStream(data);
            result.CreateOptions = BitmapCreateOptions.None;
            result.CacheOption = BitmapCacheOption.Default;

            result.EndInit();

            return result;
        }

        public static byte[] GetEncodedImageData(ImageSource image, String preferredFormat) {

            byte[] result = null;

            //图片解码器
            BitmapEncoder encoder = null;

            switch (preferredFormat.ToLower()) {
                case ".jpg":
                case ".jpeg":
                    encoder = new JpegBitmapEncoder();
                    break;

                case ".bmp":
                    encoder = new BmpBitmapEncoder();
                    break;

                case ".png":
                    encoder = new PngBitmapEncoder();
                    break;

                case ".tif":
                case ".tiff":
                    encoder = new TiffBitmapEncoder();
                    break;

                case ".gif":
                    encoder = new GifBitmapEncoder();
                    break;

                case ".wmp":
                    encoder = new WmpBitmapEncoder();
                    break;
            }

            if (image is BitmapSource) {
                MemoryStream stream = new MemoryStream();
                encoder.Frames.Add(BitmapFrame.Create(image as BitmapSource));

                encoder.Save(stream);
                stream.Seek(0, SeekOrigin.Begin);

                result = new byte[stream.Length];

                BinaryReader br = new BinaryReader(stream);

                br.Read(result, 0, (int)stream.Length);
                br.Close();
                stream.Close();
            }

            return result;
        }

        #endregion

    }s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值