C# 图片操作(图片读取,保存,转换,传输)

时间:2025-04-17 07:31:16

 JPG PNG GIF BMP图片格式的区别:

类型 优点 缺点 应用场景 相同图片大小比较
BMP 无损压缩,图质最好 文件太大,不利于网络传输 152K
GIF 动画存储格式 最多256色,画质差 53K
PNG 可保存透明背景的图片 画质中等 202K
JPG 文件小,利于网络传输 画质损失 车牌识别 84K

 图片代码操作:

 根据图片的相对路径 获取Image对象:

      /// <summary>
        /// 根据图片的相对路径 获取Image对象
        /// </summary>
        /// <param name="imgPath">图片的相对路径(如:@"/images/")</param>
        /// <returns></returns>
        public static Image GetImage(string imgPath)
        {
            if ((imgPath))
            {
                Image im = new Image();
                 = GetBitmapImage(imgPath);
                return im;
            }
            else
                return null;
        }

 根据图片的相对路径 返回 BitmapImage对象的实例化:

        /// <summary>
        /// 根据图片的相对路径 返回 BitmapImage对象的实例化
        /// </summary>
        /// <param name="imgPath">图片的相对路径(如:@"/images/")</param>
        /// <returns></returns>
        public static BitmapImage GetBitmapImage(string imgPath)
        {
            try
            {
                if (!("/"))
                {
                    imgPath = "/" + imgPath;
                }
                return new BitmapImage(new Uri("Pack://application:,,," + imgPath));
            }
            catch
            {
                return null;
            }
        }

 根据图片的相对路径 获取ImageBrush对象:

      /// <summary>
      /// 根据图片的相对路径 获取ImageBrush对象 (此对象资源可以直接用于绑定控件的Background属性)
      /// </summary>
      /// <param name="imgPath">图片的相对路径(如:@"/images/")</param>
      /// <returns></returns>
        public static ImageBrush GetImageBrush(string imgPath)
        {
            if ((imgPath))
            {
                ImageBrush ib = new ImageBrush();
                 = GetBitmapImage(imgPath);
                return ib;
            }
            else
                return null;
        }

在Path中读取图片byte[]:

        /// <summary>
        /// 根据图片的路径解析成图片资源
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public static byte[] BitmapImageToByteArray(String filePath)
        {

            byte[] byteArray = null ;
            if((filePath))
                byteArray = (filePath);
            return byteArray;
        }

byte[]转BitmapImage:

        /// <summary>
        /// 解析字节数组成图片
        /// </summary>
        /// <param name="byteArray"></param>
        /// <returns></returns>
        public static BitmapImage ByteArrayToBitmapImage(byte[] byteArray)
        {
            BitmapImage bmp = null;
            try
            {
                bmp = new BitmapImage();
                ();
                 = new MemoryStream(byteArray);
                ();
            }
            catch
            {
                bmp = null;
            }
            return bmp;
        }

BitmapImage转byte[]:


        /// <summary>
        /// 图片数据解析成字节流数组(用于存储到数据库)
        /// </summary>
        /// <param name="bmp"></param>
        /// <returns></returns>
        public static byte[] BitmapImageToByteArray(BitmapImage bmp)
        {
            byte[] byteArray = null;
            try
            {
                Stream sMarket = ;
                if (sMarket != null &&  > 0)
                {
                     = 0;
                    using (BinaryReader br = new BinaryReader(sMarket))
                    {
                        byteArray = ((int));
                    }
                }
            }
            catch
            {
            }
            return byteArray;
        }

将Bitmap对象转换成bitmapImage对象:

        /// <summary>
        /// 将Bitmap对象转换成bitmapImage对象
        /// </summary>
        /// <param name="bitmap"></param>
        /// <returns></returns>
        public BitmapImage ConvertBitmapToBitmapImage(Bitmap bitmap)
        {
            MemoryStream stream = new MemoryStream();
            (stream, );
            BitmapImage image = new BitmapImage();
            ();
             = stream;
            ();
            return image;
        }

将bitmapImage对象转换成Bitmap对象:

        /// <summary>
        /// 将bitmapImage对象转换成Bitmap对象
        /// </summary>
        /// <param name="bitmapImage"></param>
        /// <returns></returns>
        public static  BitmapImageToBitmap(BitmapImage bitmapImage)
        {
            using ( outStream = new ())
            {
                BitmapEncoder enc = new BmpBitmapEncoder();
                ((bitmapImage));
                (outStream);
                 bitmap = new (outStream);
                return bitmap;
            }
        }

bitmap转换成ImageSource:

        [DllImport("", SetLastError = true)]
        private static extern bool DeleteObject(IntPtr hObject);
        /// <summary>
        /// 从bitmap转换成ImageSource
        /// </summary>
        /// <param name="icon"></param>
        /// <returns></returns>
        public static ImageSource ChangeBitmapToImageSource(Bitmap bitmap)
        {
            IntPtr hBitmap = ();
            ImageSource wpfBitmap = (
                hBitmap,
                ,
                ,
                ());
            if (!DeleteObject(hBitmap))//记得要进行内存释放。否则会有内存不足的报错。
            {
                throw new .Win32Exception();
            }
            return wpfBitmap;
        }

从Bitmap转换成BitmapSource:

        /// <summary>
        /// 从Bitmap转换成BitmapSource
        /// </summary>
        /// <param name="bmp"></param>
        /// <returns></returns>
        public static BitmapSource ChangeBitmapToBitmapSource(Bitmap bmp)
        {
            BitmapSource returnSource;
            try
            {
                returnSource = ((), , , ());
            }
            catch
            {
                returnSource = null;
            }
            return returnSource;
        }

 从Icon到ImageSource的转换:

        /// <summary>
        /// 从Icon到ImageSource的转换
        /// </summary>
        public ImageSource ChangeIconToImageSource(Icon icon)
        {
            ImageSource imageSource = (
            ,
            ,
            ());
            return imageSource;
        }

Stream保存图片:

FileStream fs = new FileStream("", , );
Stream MyStream = new MemoryStream((byte[])imageBytes); //取出的byte[]数组
int read = 0;
byte[] Mybyte = new byte[1024];
do
{
      read = (Mybyte,0,1024);
      (Mybyte,0,read);
} while (read > 0);
();
();
();
();

图片通过CGI获取保存到本地快照:

        public string Address = "url address";
        public void SavefromWeb()
        {
            FileStream fs = new FileStream("D:\\",,);
            HttpWebRequest MyHttpWebRequest = null;
            HttpWebResponse MyHttpWebResponse = null;
            Stream MyStream = null;
            try
            {
                MyHttpWebRequest = (HttpWebRequest)(Address);
                MyHttpWebResponse = (HttpWebResponse)();
                MyStream = ();
            }
            catch(Exception)
            {
            }
            int read = 0;
            byte[] Mybyte=new byte[1024];
            do
            {
                read = (Mybyte,0,1024);
                (Mybyte,0,read);
            }while(read>0);
            ();
            ();
            ();
            ();
            ();
        }

参考:wpf 图片操作类 ImageBrush BitmapImage - ﹎蓝言觅ぷ雨 - 博客园

WPF(1)---图片的获取与存储 - Probably - 博客园

JPG PNG GIF BMP图片格式的区别_Wanda && Aidem -****博客_bmp jpg png 区别