近期项目有个需求是关于图片操作的,须要将图片保存到数据库中。经过尝试才知道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;
}


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

  1. java byte数组与16进制间的相互转换

      java byte数组与16进制间的相互转换 CreationTime--2018年6月11日15点34分 Author:Marydon 1.准备工作 import java.util.Array ...

  2. iOS-NSdata 与 NSString,Byte数组,UIImage 的相互转换

    IOS---NSdata 与 NSString,Byte数组,UIImage 的相互转换 1. NSData 与 NSString NSData-> NSString NSString *aSt ...

  3. C# byte数组与Image的相互转换

    功能需求: 1.把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库. 2.把从数据库读取的byte数组转换为Image对象,赋值给相应的控件显示. 3.从图片byte ...

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

    1. NSData 与 NSStringNSData-> NSStringNSString *aString = [[NSString alloc] initWithData:adata enc ...

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

    1. NSData 与 NSString NSData-> NSString NSString *aString = [[NSString alloc] initWithData:adataen ...

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

    在进行网络通信时可能需要传输对象,如果用NIO的话,只能用Bytebuffer和channel直接 通过ByteArray*Stream和Object*Stream可以将byte数组和对象进行相互的转 ...

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

    功能需求 1.把一张图片(png bmp jpeg bmp gif)转换为byte数组在内存中操作. 2.把内存中的byte数组转换成Image对象,赋值给相应的控件显示. 3.从图片byte数组得到 ...

  8. C# byte数组与Image的相互转换【转】

    功能需求: 1.把一张图片(png bmp jpeg bmp gif)转换为byte数组存放到数据库. 2.把从数据库读取的byte数组转换为Image对象,赋值给相应的控件显示. 3.从图片byte ...

  9. java byte数组与String的相互转换

    String  ->   byte数组 String str = "abc天"; byte[] btr = str.getBytes(); System.out.printl ...

随机推荐

  1. 显示gif动画(帧动画的播放)

    在android上显示gif不太方便,虽然有控件可以实现,但是效果不是很好,保险点儿的作法还是使用帧动画来处理.①在XML中定义animation-list:<?xml version=&quo ...

  2. cuda thrust函数首次调用耗费时间比后续调用长原因

    lazy context initialisation. stackoverflow

  3. @property 的本质是什么?

    将访问.变量.访问控制进行了绑定:编译器负责自动合成. @dynamic:不会自动合成成员变量和存取方法. @property 的本质是什么?@property = ivar + getter + s ...

  4. 了解Linux的基础知识和一般概念

    1.GNU和GPL    GNU计划(又称革奴计划),是由Richard Stallman(理查德·斯托曼)在1983年9月27日公开发起的自由软件集体协作计划.它的目标是创建一套完全自由的操作系统. ...

  5. python读取word文档

    周末需要做一个统计word文档字数的问题,刚开始以为很简单,因为之前做过excel表格相关的任务,所以认为利用扩展模块应该比较简单. 通过搜索,确实搜到了一个python操作word的模块,pytho ...

  6. gitHub上如何设置或者取消电子邮箱提醒

    原文链接:点我 我们正常注册的gitHub一般应该都是电子邮箱的方式,在注册账号时可能选择或者默认给了各种提醒,但是gitHub的邮箱提醒真的就比较烦人了,特别是最近团队开发项目,什么动态都有提醒,就 ...

  7. 洛谷3964 [TJOI2013]松鼠聚会

    题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示,两个点的距离定义为点( ...

  8. vi-vim和linux常用快捷键

    移动光标 上      k 下      j 左     h 右     l 移动光标到当前行行尾首 ^ 移动光标到当前行行尾  $ 移动到文件的第一行  gg 移动到文件的最后一行  G 移动到第1 ...

  9. Spring Boot学习总结(2)——Spring Boot整合Jsp

    怎么使用jsp上面起了疑问,查阅了多方资料,找到过其他人的博客的描述,也找到了spring在github上的给出的例子,看完后稍微改动后成功 整合jsp,于是决定将整合过程记载下来. 无论使用的是那种 ...

  10. struts2文件过滤拦截器fileUpload以及各种文件类型

    本文某些内容复制自:http://zhidao.baidu.com/link?url=F0Z-FqbZ83BOj_xXp_B8rgJDzUoeVSWGgXwPNP5fEdLU1nvBK7yO4vnX_ ...