欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# byte数组与Image相互转换的方法

程序员文章站 2024-02-13 09:38:40
功能需求: 1、把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库。 2、把从数据库读取的byte数组转换为image对象,赋值给相应...

功能需求:

1、把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库。

2、把从数据库读取的byte数组转换为image对象,赋值给相应的控件显示。

3、从图片byte数组得到对应图片的格式,生成一张图片保存到磁盘上。

这里的image是system.drawing.image。

以下三个函数分别实现了上述三个需求:

复制代码 代码如下:

// convert image to byte[]
        private byte[] imagetobyte(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);
                return buffer;
            }
        }

        // convert byte[] to image
        private image bytetoimage(byte[] buffer)
        {
            memorystream ms = new memorystream(buffer);
            image image = system.drawing.image.fromstream(ms);
            return image;
        }

        // convert byte[] to a picture
        private string createimagefrombyte(string filename, byte[] buffer)
        {
            string file = filename; //文件名(不包含扩展名)
            image image = bytetoimage(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";
            }
            //文件路径目录必须存在,否则先用directory创建目录
            file.writeallbytes(file, buffer);
            return file;
        }