Image与byte[]数组的相互转换



最近项目有个需求是关于图片操作的,需要将图片保存到数据库中,经过尝试才知道Image类型文件是不能直接存储到数据库中的。保存之前需要我们做一步转换:将Image转换成字节数组类型Byte[]。转换需要用到读写内存的MemoryStream类:

MemoryStream类用于向内存而不是磁盘读写数据。MemoryStream封装以无符号字节数组形式存储的数据,该数组在创建MemoryStream对象时被初始化,或者该数组可创建为空数组。可在内存中直接访问这些封装的数据。内存流可降低应用程序中对临时缓冲区和临时文件的需要。

Image转Byte[]方法:

        public byte[] imageToByteArray(System.Drawing.Image imageIn)
        {
            MemoryStream ms = new MemoryStream();
            imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);//将此图像以指定的格式保存到指定的流中
            return ms.ToArray();   //将流内容写入字节数组
        }

转换完成后,存入Oracle数据库时还会报错:

这是因为在Oracle中BLOB类型的字段用于存储二进制数据,而非Byte[]。所以仍需要进一步转换。

Bytep[]转换为Blob类型:

 OracleParameter[] para = new OracleParameter[2];    //类似SQLParameter,shape为参数
                 para[0] = new OracleParameter("shape", OracleType.Blob, picBo.BPicBig.Length);
                 para[0].Value = picBo.BPicBig;      //picBo.BPicBig为byte[]类型
                 para[1] = new OracleParameter("shape1", OracleType.Blob, picBo.BPicSmall.Length);
                 para[1].Value = picBo.BPicSmall;

转换完成后即可将图片保存至数据库。

如果界面需要展示数据库中的图片时,就需要进行Byte[]到Image的转换了:

public Image byteArrayToImage(byte[] byteArrayIn)
{
     MemoryStream ms = new MemoryStream(byteArrayIn);
     Image returnImage = Image.FromStream(ms);
     return returnImage;
}



时间: 2024-10-13 11:20:58

Image与byte[]数组的相互转换的相关文章

byte数组与对象之间的相互转换

在进行网络通信时可能需要传输对象,如果用NIO的话,只能用Bytebuffer和channel直接 通过ByteArray*Stream和Object*Stream可以将byte数组和对象进行相互的转换. 1.byte数组转对象: byte [] data=initData();//初始化byte数组 ByteArrayInputStream inputStream=new ByteArrayInputStream(data); ObjectInputStream oInputStream=ne

NSdata 与 NSString,Byte数组,UIImage 的相互转换

1. NSData 与 NSString NSData-> NSString NSString *aString = [[NSString alloc] initWithData:adataencoding:NSUTF8StringEncoding]; NSString->NSData NSString *aString = @"1234abcd"; NSData *aData = [aString dataUsingEncoding: NSUTF8StringEncodi

[C#参考]byte数组和Image的相互转换

功能需求 1.把一张图片(png bmp jpeg bmp gif)转换为byte数组在内存中操作. 2.把内存中的byte数组转换成Image对象,赋值给相应的控件显示. 3.从图片byte数组得到对应的图片格式,生成一张图片保存到磁盘中. 这个的Image是System.Drawing.Image. //Get an image from file Image image = Image.FromFile("D:\\test.jpg"); Bitmap bitmap = new B

NSData与NSString、Byte数组,UIImage的相互转换

1.NSData与NSString NSData -> NSString NSString *aString = [[NSString alloc] initWithData:adata encoding:NSUTF8StringEncoding]; NSString->NSData NSString *aString = @"1234abcd"; NSData *aData = [aString dataUsingEncoding: NSUTF8StringEncodin

Delphi Byte数组与Int String之间的相互转换

http://www.cnblogs.com/lcw/p/3352864.html string string = AnsiString = 长字符串,理论上长度不受限制,但其实受限于最大寻址范围2的32次方=4G字节: 变量Str名字是一个指针,指向位于堆内存的字符序列,字符序列起始于@Str[1],@Str[1]偏移负16个字节的空间存储着字串长度.引用计数等信息.字符序列以NULL结束. string[n] string[n] = ShortString = 短字符串,最多容纳255个字符

ios -- NSdata 与 NSString,Byte数组,UIImage 的相互转换(转)

1. NSData 与 NSStringNSData-> NSStringNSString *aString = [[NSString alloc] initWithData:adata encoding:NSUTF8StringEncoding]; NSString->NSDataNSString *aString = @"1234abcd";NSData *aData = [aString dataUsingEncoding: NSUTF8StringEncoding]

ios -- NSdata 与 NSString,Byte数组,UIImage 的相互转换

---恢复内容开始--- 1. NSData 与 NSStringNSData-> NSStringNSString *aString = [[NSString alloc] initWithData:adata encoding:NSUTF8StringEncoding]; NSString->NSDataNSString *aString = @"1234abcd";NSData *aData = [aString dataUsingEncoding: NSUTF8St

byte数组和文件的相互转换

1 /** 2 * 获得指定文件的byte数组 3 */ 4 5 private byte[] getBytes(String filePath){ 6 byte[] buffer = null; 7 try { 8 File file = new File(filePath); 9 FileInputStream fis = new FileInputStream(file); 10 ByteArrayOutputStream bos = new ByteArrayOutputStream(1

byte[]数组与16进制字符串的相互转换

1.将byte[]数组转换成16进制字符 /** * 将byte[]数组转换成16进制字符.一个byte生成两个字符,长度对应1:2 * @param bytes,输入byte[]数组 * @return 16进制字符 */ public static String byte2Hex(byte[] bytes) { if (bytes == null) { return null; } StringBuilder builder = new StringBuilder(); // 遍历byte[