数据流填充示到PictureBox

来源:互联网 发布:右脑 知乎 编辑:程序博客网 时间:2024/06/01 08:05

    第一次写,根据别人的提示,经过一天的努力(我比较笨,你也许一会就搞定了),终于完成了这个功能. 写出来,一是备忘,二是希望能帮助更多的人,让需要的人不再走弯路.

        方法还在完善更新中,请高手们跟帖补充,谢谢.

把本地图片存入数据库:MSSQL ,数据类型是Image,

        Dim obj As New ClaOptDatabase     ''自定义的数据库操作类,没有什么特别的.就是SQLClient
        Dim bit1() As Byte                 ''定义一个二进制数组,用来存放图片
        Dim nLen As Long                ''定义长度,用来得到图片大小
        Dim tStream As New FileIO.FileSystem       ''定义文件系统,用来读取图片
        Dim tIoStream As New IO.FileStream("C:/RS-Dessert.gif", IO.FileMode.Open, IO.FileAccess.Read) ''读取图片,图片名为:C:/RS-Dessert.gif
        Dim tIoBReader As New IO.BinaryReader(tIoStream)    ''把图片数据读取成二进制.
        Dim tIoFileInfo As New IO.FileInfo("C:/RS-Dessert.gif")  ''得到图片文件信息,如大小等.
        nLen = tIoFileInfo.Length
        ReDim bit1(nLen)
        tIoBReader.Read(bit1, 0, nLen)    ''把图片二进制数据读取到Bit1

        Dim sql As String               
        sql = "select * from  tb_test where id=15"

        ''以下是利用Ds更新数据库

        Try
            Dim ds As New DataSet
            obj.SelectDs(sql, ds, "TestPic")
            If ds.Tables("TestPic").Rows.Count > 0 Then
                Dim tRow As DataRow
                tRow = ds.Tables("TestPic").Rows(0)
                tRow.Item(2) = bit1
                obj.UpdateDs(sql, ds, "TestPic")

            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

''------------图片上传到数据库结束.----------------------

以下是图片从数据库中读出,显示到PictureBox或保存到本地磁盘.

        Dim sql As String
        Dim obj As New ClaOptDatabase                     ''同上,
        sql = "select * from  tb_test where id=15"
        Dim bit1() As Byte                                                 ''同上
        Dim nLen As Long                                               ''同上
        Try
            Dim dr As SqlClient.SqlDataReader
            dr = obj.ExecSqlReader(sql)
            If dr.Read Then
                Dim myImg As Image                               ''定义一个Image

                nLen = 4000                                               ''这里应该得到数据库字段的长度,我这里没有完成,只是写了个固定值.有待于完善
                ReDim bit1(nLen)                                      ''预设一个和文件大小一样的二进制内存空间
                bit1 = dr.Item("Picbit")                               ''把图片数据放入二进制内存空间中.

                Dim mySysStream As New IO.MemoryStream(bit1)      ''把图片读取到内存数据流中.

                myImg = Image.FromStream(mySysStream)           ,从内存数据流中为Image填充数据
                MyPicBox.Image = myImg                                             ''把Image给PictureBox赋值.显示出来.
                myImg.Save("C:/123.gif")                                              ''把Image里的图片保存到本地磁盘.
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try