C# Bitmap 转为位图、 ImageSource 转为Bitmap、Bitmap 转 BitmapImage、BitmapImage 转为byte[]、图片压缩

Bitmap 转为位图
#region Bitmap 转为位图
        /// 
        /// Bitmap 转为位图
        /// 
        /// Bitmap 对象
        /// ImageSource 位图对象
        public static ImageSource BitmapToImageSource(System.Drawing.Bitmap bitmap)
        {
            try
            {
                IntPtr intPtr = bitmap.GetHbitmap();
                ImageSource imageSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(intPtr,IntPtr.Zero,Int32Rect.Empty,BitmapSizeOptions.FromEmptyOptions());
                return imageSource;

            }
            catch (Exception ex)
            {

                WriteLog.WriteErrorInfo(ex);
            }
            return null;
        }
        #endregion
ImageSource 转为Bitmap
#region ImageSource 转为Bitmap
        /// 
        /// ImageSource 转为Bitmap
        /// 
        /// imageSource 对象
        /// 返回 Bitmap 对象
        public static System.Drawing.Bitmap ImageSourceToBitmap(ImageSource imageSource)
        {
            try
            {             
                BitmapSource bitmapSource = (BitmapSource)imageSource;
                System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(bitmapSource.PixelWidth, bitmapSource.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                System.Drawing.Imaging.BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(System.Drawing.Point.Empty, bitmap.Size),System.Drawing.Imaging.ImageLockMode.WriteOnly,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                bitmapSource.CopyPixels(Int32Rect.Empty,data.Scan0,data.Height*data.Stride,data.Stride);
                bitmap.UnlockBits(data);
                return bitmap;
            }
            catch (Exception ex)
            {
                WriteLog.WriteErrorInfo(ex);
            }
            return null;
        }
        #endregion
Bitmap  转 BitmapImage
#region  Bitmap  转 BitmapImage
        /// 
        /// Bitmap  转 BitmapImage
        /// 
        /// Bitmap 对象
        /// 转换后的 BitmapImage对象
        public static BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap)
        {
            try
            {
                BitmapImage relust = new BitmapImage();
                using (MemoryStream memoryStream=new MemoryStream())
                {
                    MemoryStream memory = new MemoryStream();
                    bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
                    memoryStream.Position = 0;
                    relust.BeginInit();
                    relust.CacheOption = BitmapCacheOption.OnLoad;
                    memoryStream.CopyTo(memory);
                    relust.StreamSource = memory;
                    relust.EndInit();
                    relust.Freeze();
                    return relust;
                }
            }
            catch (Exception ex)
            {
                WriteLog.WriteErrorInfo(ex);
            }
            return null;
        }
        #endregion
BitmapImage 转为byte[]
#region BitmapImage 转为byte[]
        /// 
        /// BitmapImage 转为byte[]
        /// 
        /// BitmapImage 对象
        /// byte[] 数组
        public static byte[] BitmapImageToByteArray(BitmapImage bitmapImage)
        {
            byte[] buffer = new byte[] { };
            try
            {
                Stream stream = bitmapImage.StreamSource;
                if (stream!=null&& stream.Length>0)
                {
                    stream.Position = 0;
                    using (BinaryReader binary=new BinaryReader(stream))
                    {
                        buffer = binary.ReadBytes((int)stream.Length);
                    }
                }
            }
            catch (Exception ex)
            {
                WriteLog.WriteErrorInfo(ex);
            }
            return buffer;
        }
        #endregion
图片压缩
#region 图片压缩
        /// 
        /// 图片压缩
        /// 
        /// 要压缩的源图像
        /// 要求的高
        /// 要求的宽
        /// 
        public static System.Drawing.Bitmap GetPicThumbnail(System.Drawing.Bitmap bitmap , int height, int width)
        {
            try
            {
                lock (bitmap)
                {
                    System.Drawing.Bitmap iSource = bitmap;
                    System.Drawing.Imaging.ImageFormat imageFormat = iSource.RawFormat;
                    int sw = width, sh = height;
                    //按比例缩放
                    System.Drawing.Bitmap ob = new System.Drawing.Bitmap(width, height);
                    System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(ob);
                    graphics.Clear(System.Drawing.Color.WhiteSmoke);
                    graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                    graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                    graphics.DrawImage(iSource,new System.Drawing.Rectangle((width-sw)/2,(height-sh)/2,sw,sh),0,0,iSource.Width,iSource.Height,System.Drawing.GraphicsUnit.Pixel);
                    graphics.Dispose();
                    return ob;
                }
            }
            catch (Exception ex)
            {
                WriteLog.WriteErrorInfo(ex);
            }
            return bitmap;
        }
        #endregion

原文链接:https://www.cnblogs.com/lipengxu/p/15734297.html

 

你可能感兴趣的:(C#,C#)