private void getWebPicture_Click(object sender, EventArgs e)
{
WebRequest request = WebRequest.Create("http://d.hiphotos.baidu.com/image/h%3D200/sign=6008b360f336afc3110c38658318eb85/a1ec08fa513d26973aa9f6fd51fbb2fb4316d81c.jpg");
WebResponse response = request.GetResponse();
Stream s=response.GetResponseStream();
byte[] data = new byte[];
int length = ;
MemoryStream ms = new MemoryStream();
while ((length=s.Read(data,,data.Length))>)
{
ms.Write(data, , length);
}
ms.Seek(, SeekOrigin.Begin);
pictureBox1.Image = Image.FromStream(ms);
}

byte[]数组转换成Image:

   private byte[] ImageTobyteshuzu(Image image)
{
MemoryStream ms = new MemoryStream();
Bitmap bi = new Bitmap(image);
bi.Save(ms, image.RawFormat);
byte[] data = new byte[ms.Length];
ms.Seek(, SeekOrigin.Begin);
ms.Read(data, , data.Length);
return data;
}

Image转换成byte[]数组:

     private Image byteshuzuToImage(byte[] imageBytes)
{
MemoryStream ms = new MemoryStream();
ms.Write(imageBytes, , imageBytes.Length);
ms.Seek(, SeekOrigin.Begin);
Image i = Image.FromStream(ms);
return i;
}

最后说一下,使用了memeoryStream的write和read方法以后,最好一定要把流指针回到最开始的地方!!! 我因为这个问题老是转换失败,困扰了很久!!!  写这篇博客,以便巩固。

wpf:将iv1上获取到的网络图片存到数据库,并从数据库中读取并显示到Image上:

        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            if (iv1.Source!=null)
            {
                BitmapImage bi = (BitmapImage)iv1.Source;
                Stream s=bi.StreamSource;
                s.Seek(, SeekOrigin.Begin);
                byte[] data = new byte[s.Length];
                s.Read(data, , data.Length);
                saveImageToSqlServer(data);
                getImageFromSqlServer();
            }
            else
            {
                MessageBox.Show("请先获取图片!");
            }
        }

保存到数据库:

        private void saveImageToSqlServer(byte[] data)
{
SqlConnection conn = new SqlConnection(connectString);
conn.Open();
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.CommandText = "delete from tb1";
comm.ExecuteNonQuery();
comm.Connection = conn;
comm.CommandText = "insert into tb1(Image) values(@Image)";//注意这里要加@Image
comm.Parameters.Add("@Image", System.Data.SqlDbType.Image,data.Length);
comm.Parameters[].Value = data;
comm.ExecuteNonQuery();
conn.Close();
}

从数据库中读取:

        private void getImageFromSqlServer()
{
SqlDataAdapter sda = new SqlDataAdapter("select * from tb1", connectString);
DataTable dt = new DataTable();
sda.Fill(dt);
byte[] data = (byte[])dt.Rows[][];
MemoryStream ms = new MemoryStream();
ms.Write(data, , data.Length);
ms.Seek(, SeekOrigin.Begin);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
iv2.Source = bi;
}

原作者:https://blog.csdn.net/qq_30975833/article/details/52294603

获取网络图片并显示在picturbox上,byte[]数组转换成Image:的更多相关文章

  1. C# byte数组转换成List<String>

    byte[] bys=buffer; string[] AllDataList=  Encoding.Default.GetString(bys).Split(Environment.NewLine. ...

  2. C#中如何把byte[]数组转换成其他类型

    http://bbs.csdn.net/topics/20447859 byte[] bytes = new byte[256]; //receive some stream from network ...

  3. jquery通过AJAX从后台获取信息并显示在表格上的类

    前一阵我写了:<jquery通过AJAX从后台获取信息并显示在表格上,并支持行选中.>现在,我把他们处理了一下,不需要每次写代码了: 具体代码如下: //获取数据并显示数据表格 funct ...

  4. jquery通过AJAX从后台获取信息并显示在表格上,并支持行选中

    不想用Easyui的样式,但是想要他的表格功能,本来一开始是要到网上找相关插件的,但是没找到就开始自己写,没想到这么简单. 后台代码:(这个不重要) public ActionResult GetDi ...

  5. C# byte数组转成Bitmap对象

    方法一: /// <summary> /// 将数组转换成彩色图片 /// </summary> /// <param name="rawValues" ...

  6. Java 基础类型转换byte数组, byte数组转换基础类型

    Java 基础类型转换byte数组, byte数组转换基础类型 Java类型转换 java类对象转化为byte数组

  7. android中的byte数组转换(转)

    /** * 将一个单字节的byte转换成32位的int * * @param b * byte * @return convert result */ public static int unsign ...

  8. c# 将byte数组保存成图片

    将byte数组保存成图片: 方式一:System.IO.File.WriteAllBytes(@"c:\test.jpg", bytes); 方式二:MemoryStream ms ...

  9. C语言:将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换。-删除指针p所指字符串中的所有空白字符(包括制表符,回车符,换行符)-在带头结点的单向链表中,查找数据域中值为ch的结点,找到后通过函数值返回该结点在链表中所处的顺序号,

    //将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换. #include <stdio.h> #include <string.h> void fun ...

随机推荐

  1. solaris下安装oracle 11g与11g rac

    1.To Find Swap, RAM, and OS Version 对于 Solaris 操作系统,查看 Swap, RAM, and OS Version 的方法: swap -l /usr/s ...

  2. jenkins不能执行windows下的命令,cmd可执行。

    1.TortoiseSVN程序在安装时候,选择在windows下的命令行执行,要安装 2.安装后,“C:\Program Files\TortoiseSVN\bin”路径下就存在了命令行的一些指令 3 ...

  3. 从零开始搭建django前后端分离项目 系列二(项目搭建)

    在开始项目之前,假设你已了解以下知识:webpack配置.vue.js.django.这里不会教你webpack的基本配置.热更新是什么,也不会告诉你如何开始一个django项目,有需求的请百度,相关 ...

  4. CF1103D Professional layer 状压DP

    传送门 首先对于所有数求gcd并求出这个gcd含有的质因子,那么在所有数中,只有这一些质因子会对答案产生影响,而且对于所有的数,每一个质因子只会在一个数中被删去. 质因子数量不会超过\(11\),所以 ...

  5. Quartz.NET 任务调度新教程

    https://www.cnblogs.com/yscit/p/10393867.html

  6. layui轮播中箭头不起作用问题

    layui轮播中箭头不起作用问题 layui轮播插件在使用中发现箭头不起作用其他都合适,是什么原因造成的呢?发现单独提出layui中的demo是合适的,通过仔细慢慢的寻找,发现layui.use('c ...

  7. How to Install MemSQL

    MemSQL runs natively on 64-bit Linux operating systems. Your system hardware must have at least 4 CP ...

  8. hibernate添加数据时Exception in thread "main" org.hibernate.PropertyValueException: not-null property references a null or transient value: com.javakc.hibernate.test.entity.TestEntity.testName

    意思是,一个非null属性引用了一个null或瞬态值.就是在对应实体类配置文件hbm.xml中该属性配置了not-null="true",将其去掉即可.

  9. 消息队列queue

    一.queue 在多线程编程中,程序的解耦往往是一个麻烦的问题,以及在socket网络编程中也会有这样的问题.recv 和send之间,如果服务端有消息,问题需要发送给客户端,而那边的recv 被主程 ...

  10. 快速为git添加一个用户

    环境:用gitosis-admin管理git的权限. 前期git环境的搭建略去,主要给出快速添加一个用户的步骤: 在git bash中用“ssh-keygen -t rsa”生成公钥私钥,默认放到 “ ...