[转]VB 图片转换为Byte,和从Byte

[转]VB 图片转换为Byte()和从Byte()中读取图片的捷径

从某位牛人的 blog 上保存下来的,不过忘了来源了。

向《软件报》投稿的一篇文章 :VB 图片转换为Byte()和从Byte()中读取图片的捷径,没有试过给报社投稿,第一次,投了很久,但还是登出来了,虽然没有稿费,但却很快乐。

文章正文如下:

很多时候,我们需要将图片框中的图片保存到数据库,并从数据库中读取出来。虽然VB中的图片框支持直接绑定数据库存入图片和读取图片的方法,但是很多场合并不能使用绑定来解决问题。于是很多人在进行操作时,都使用了类似以下的方法: 读入图片到图片框后 ,再使用 Open "Picture" For Binary 来打开文件并读入为Byte() 数组。而从数据库读取图片格式时,则需要先将 字段数据读取到 Byte(),再使用 Open "Picture" For Binary 写入到磁盘上的临时文件再使用 LoadPicture 来读取临时文件。写入和读取都是多余的步骤,浪费了时间还留下了临时文件,在图片较大的情况下,对效率的影响相当严重。

是否有更快捷方法来保存图片框图片/读取Byte()中的图片呢?是的,在 VB 下有一个鲜为人知的对象:

PropertyBag ,该对象原本是保存 ActiveX 中属性中的数据,并把它写到文件中去。

但是我们却能利用它来达到读取图片框图片为Byte() 的目的,请看下列代码:

程序代码:

'假设Form 上已经存在Picture1的控件,并已经设置好图片

Dim PBag As New PropertyBag

Dim B() As Byte

PBag.WriteProperty "Picture", Picture1.Picture    '读取Picture1.Picture 图片并写到 Pbag 容器中

B = PBag.Contents  '获取容器Byte 到 B() 数组中,这时 B 就时我们想要获得的Byte数组

        '读取 Byte() 数组内容到 Picture

PBag.Contents = B   '指定 PBag容器的内容,

  '读取容器中的图片

Set Picture1.Picture = PBag.ReadProperty("Picture")

简单的几句代码就可以完成从图片到Byte() ,从Byte()到图片的转换。而且其保存和读取的格式都是使用了原始格式,

即:如果你的图片框读入的是Jpg图片格式,则保存的Byte()数组也是该Jpg格式的数组,而非普通位图的数组,所以你也不用担心转换后的数组很没有压缩,很大。

其实:PropertyBag对象并不止于读取保存图片,它就象一个大麻袋,可以藏任何东西,并放到你想放的地方,具体藏什么 ,是由你决定的。你可以将任何对象保存为Byte(),并在需要的时候读出来