byte[] 和 image 相互转换

1.图片转为byte[]

//获取图片
        public static void findImage() 
        {
            Image image = Image.FromFile("D:\\test1.jpg");//获取该路劲下的图片test1.jpg
            ImageToBytes(image);//调用ImageToByte()
        }
        //图片转byte[]
        public static byte[] ImageToBytes(Image image)
        {
            //获取图片格式
            ImageFormat format = image.RawFormat;
            using (MemoryStream ms = new MemoryStream())//判断图片格式
            {
                if (format.Equals(ImageFormat.Jpeg))
                {
                    image.Save(ms, ImageFormat.Jpeg);
                }
                else if (format.Equals(ImageFormat.Png))
                {
                    image.Save(ms, ImageFormat.Png);
                }
                else if (format.Equals(ImageFormat.Bmp))
                {
                    image.Save(ms, ImageFormat.Bmp);
                }
                else if (format.Equals(ImageFormat.Gif))
                {
                    image.Save(ms, ImageFormat.Gif);
                }
                else if (format.Equals(ImageFormat.Icon))
                {
                    image.Save(ms, ImageFormat.Icon);
                }
                byte[] buffer = new byte[ms.Length];
                //Image.Save()会改变MemoryStream的Position,需要重新Seek到Begin
                ms.Seek(0, SeekOrigin.Begin);   //将当前流中的位置设置为指定值
                ms.Read(buffer, 0, buffer.Length);//读出数据

                //rgb数据
                CreateImageFromBytes(buffer);
                return buffer;
            }
        }

2.byte[]转为图片

// Byte[]转图片
        public static Image BytesToImage(byte[] buffer)
        {
            MemoryStream ms = new MemoryStream(buffer);
            Image image = Image.FromStream(ms);
            ms.Close();//关闭
            ms.Dispose();//释放
            return image;
        }

3.Byte[]转图片并保存

public static string CreateImageFromBytes(byte[] buffer)
        {
            string file = "test1";
            Image image = BytesToImage(buffer);
            ImageFormat format = image.RawFormat;
            if (format.Equals(ImageFormat.Jpeg))
            {
                file += ".jpeg";
            }
            else if (format.Equals(ImageFormat.Png))
            {
                file += ".png";
            }
            else if (format.Equals(ImageFormat.Bmp))
            {
                file += ".bmp";
            }
            else if (format.Equals(ImageFormat.Gif))
            {
                file += ".gif";
            }
            else if (format.Equals(ImageFormat.Icon))
            {
                file += ".icon";
            }
            System.IO.FileInfo info = new System.IO.FileInfo(file);
            System.IO.Directory.CreateDirectory(info.Directory.FullName);
            File.WriteAllBytes(file, buffer);
            return file;
        }

4.有rgb数据直接画图

 //reg数据画图
        public static Bitmap CommondRgb(byte[] image)
        {
            int w = 1280, h = 1024;//图片大小设置
            //int w= 50,int h= 50;
            int rgbNum = 0;
            Bitmap bmp = new Bitmap(w, h);
            for (int y = 0; y < h; y++)//左上到右下画图
            {
                for (int x = 0; x < w; x++)
                {
                    if (rgbNum < sd.Length - 4 )
                    {
                        bmp.SetPixel(x, y, Color.FromArgb(255, sd[rgbNum + 2], sd[rgbNum + 1], sd[rgbNum]));//参数(透明度,r,g,b)
                        rgbNum += 4;//image[]为四个一组的rgb数据
                    }
                    else//像素点不够1280*1024的话补白
                    {
                        bmp.SetPixel(x, y, Color.FromArgb(255, 255, 255, 255));
                    }
                }
            }
       //设置图片保存路劲为程序运行路劲下的picture文件夹,名称为生成时间,格式为bmp //bmp.Save(Application.StartupPath + "\\Picture\\" + DateTime.Now.Ticks.ToString() + ".bmp", ImageFormat.Bmp); return bmp; //string path = Application.StartupPath + "\\picture\\";//获取程序运行路径下的picture文件夹 //string dataTime = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss");//获取当前那时间 //string dataTime = DateTime.Now.Ticks.ToString();//获取当前时间 //string picName = dataTime + ".bmp";//设置文件名 //bmp.Save(path + picName, ImageFormat.Bmp);//保存为bmp格式 //bmp.Save("D:\\picture.png", ImageFormat.Png);//保存为png格式 }
posted @ 2022-01-20 17:22  驼七  阅读(142)  评论(0)    收藏  举报