下面是两段关键代码:

        /// <summary>
/// 将一张图片转换为字节
/// </summary>
/// <param name="img">图片</param>
/// <param name="imgFormat">保存图片的类型</param>
/// <returns>byte[]</returns>
public byte[] ImgToByte(Image img,System.Drawing.Imaging.ImageFormat imgFormat)
{
Bitmap bmp = new Bitmap(img);
MemoryStream memStream = new MemoryStream();
bmp.Save(memStream, imgFormat);
memStream.Seek(, SeekOrigin.Begin); //及时定位流的开始位置
byte[] btImage = new byte[memStream.Length];
memStream.Read(btImage, , btImage.Length);
memStream.Close();
return btImage;
}

将PictureBox中的图片以参数形式传进,另一个参数是要转换成的图片类型。这个函数返回一个byte[]数组,调用这个函数,将返回的数组保存到数据库中就可以了。数据库的相应字段类型是 image 类型。需要特别注意的是这句  

memStream.Seek(0, SeekOrigin.Begin); //及时定位流的开始位置

  如果没有这句话,在后边读取数据库显示图片的时候就会报错,“无效参数”。因为save以后流的指针停在了最后,这时马上转换成byte[],通过断点调试会发现这个数组中的数据全是0,这样肯定不会转换成原来的图片。保证了保存的正确,读取的正确性才能最大限度的保证。

将从数据库中读取的数据转换成图片显示到PictureBox,和保存的过程正好相反,下面是关键函数:

        /// <summary>
/// 将byte[]数组转换成Image
/// </summary>
/// <param name="btImage">byte[]</param>
/// <returns>Image img</returns>
public Image ByteToImg(byte[] btImage)
{
MemoryStream memStream = new MemoryStream();
//Stream memStream = null;
memStream.Write(btImage, , btImage.Length);
memStream.Position = ;
memStream.Seek(, SeekOrigin.Begin);
//Bitmap bmp = new Bitmap(memStream, true);
Image img;
try
{
img = Image.FromStream(memStream,true);
memStream.Close();
//img = new Bitmap(memStream); }
catch (Exception ex)
{
img = null;
}
finally
{
//memStream.Close();
}
return img;
}

将从数据库中取到的byte[]数据转换成image后,用PictureBox.Image=img;就能显示图片了。

下边这两句的效果是一样的,取其一就行

            memStream.Position = ;
memStream.Seek(, SeekOrigin.Begin);

还有需要注意的是用完Steam流以后要及时Close()释放。这样显示图片的时候就不会再报“无效参数”的错误了。

C# 保存PictureBox中的图片到数据库,并从数据库读取图片显示到PictrueBox,解决报错 “无效参数”的更多相关文章

  1. php中读取中文文件夹及文件报错

    php读取时出现中文乱码 一般php输出中出现中文乱码我们可用 header ('content:text/html;charset="utf-8"'); php中读取中文文件夹及 ...

  2. easyui treegrid idField 所在属性中值有花括号(如Guid)当有鼠标事件时会报错,行记录一下

    easyui treegrid idField 所在属性中值有花括号(如Guid)当有鼠标事件时会报错,行记录一下

  3. 【java】在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException

    场景: 在分页查询结果中对最后的结果集List进行操作add()或remove()操作,报错:java.lang.UnsupportedOperationException 错误: java.lang ...

  4. python2 + selenium + eclipse 中,配置好runserver 127.0.0.1:9000,运行的时候,报错

    python2 + selenium + eclipse 中,配置好runserver 127.0.0.1:9000,运行的时候,报错,如图: 原因:       google发现是WSGI appl ...

  5. 解决报错 ora-00704 ora-00604 ora-00942 启动不了数据库问题

    早上海南的同事打电话说他们的审计库连不上了启动也报错,问了下最近做了些什么操作,答复是之前添加了一次磁盘. 猜测是添加磁盘启动后/dev/sdx顺序出错,或者没有正常的关闭数据库导致数据库无法正常启动 ...

  6. mac系统中搭建apache+mysql+php的开发环境,安装mysql后,登录报错:mac ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

    php新手在mac系统中搭建apache+mysql+php的开发环境(按照这篇博客来操作的:http://my.oschina.net/joanfen/blog/171109?fromerr=xvC ...

  7. 【MybatisPlus】数据库的datetime类型字段为空的时候,报错空指针?

    一.发现经历 事情是这样的,我今天本来要演示系统,就去前端同学的页面上点一点.不小心点到了其他同事编写的服务,然后界面就报错了.这给我吓得,这还能演示吗这.然后,我就去服务器查看了一下日志,发现了如下 ...

  8. Java处理JPEG图片时,需要导入com.sun.image.codec.jpeg.JPEGImageEn,报错处理

    Java处理JPEG图片时,需要导入com.sun.image.codec.jpeg.JPEGImageEn,会报错,不能使用相应的方法. 原因:java访问限制级api的时候,默认的eclipse设 ...

  9. mysql中,由于JDBC连接限制了最大包长度1024B,即1KB,报错“max_allowed_packet' ”

    报错:org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [INS ...

随机推荐

  1. Oracle-11g-R2(11.2.0.3.x)RAC Oracle Grid & Database 零宕机方式升级 PSU(自动模式)

    升级环境: 1.源库版本: Grid Infrastructure:11.2.0.3.13 Database:11.2.0.3.13 2.目标库版本: Grid Infrastructure:11.2 ...

  2. Thinkphp框架----微信公众测试号开发(2)

    ---恢复内容开始--- 最近忙着投简历找工作.现在继续更 微信回复图文设置. 效果: 页面HTML需要一个form表单 简单效果: 接下来是数据库 字段:id title(标题) text(描述) ...

  3. C#的枚举数(Enumerator)和可枚举类型(Enumerable)

    数组可以被foreach语句遍历数组中的元素,原因是数组可以按需提供一个叫做枚举数(enumerator)的对象.枚举数可以依次返回请求的数组的元素. 对于有枚举数的类型而言,必须有一个方法来获取它们 ...

  4. UML图示

    来源: http://www.uml.org.cn/oobject/200901041.asp 近些天学习设计.由于没有具体项目,原有项目也没有什么设计的概念,只是看相关的书籍,所以着实有些抓狂.然最 ...

  5. Windows命令大全

    From:http://technet.microsoft.com/zh-cn/library/cc731728(v=ws.10).aspx Adprep Append Arp Assoc At At ...

  6. apacheserver下载、安装、配置

     1.下载 下载地址:apache下载地址 点击左側"Download"下的链接,打开例如以下页面 这里能够选择版本号.我选择2.4.16.单击"2.4.16" ...

  7. Java模拟登陆02【转载】

    在使用java访问URL时,如果该URL需要身份验证,那么就不能够直接访问,因为没有登陆.那么,如何解决这个问题呢?     方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时 ...

  8. mmc运输问题

    运输问题,有生产和需求平衡,不平衡, 实际模型,没有多大意义,只是变个符号而已. 下面的是平衡的,如果不平衡,约束变一下就可以了.

  9. OSG中的示例程序简介(转)

    OSG中的示例程序简介 1.example_osganimate一)演示了路径动画的使用 (AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera ...

  10. 设计模式六大原则——合成/聚合复用原则(CARP)

    1.定义 简而言之,对于合成/聚合复用原则的定义就是:要尽量使用合成和聚合,尽量不要使用继承. 2.释义 为什么"要尽量使用合成和聚合.尽量不要使用继承"呢? 这是由于: 第一,继 ...