VB 如何将数组保存为图像
我有一个三维数组,比如PicData(1toWidth,1toHeight,1to3),其中比如PicData(x,y,1)代表第(x,y)坐标上该像素点的Red值,Pi...
我有一个三维数组,比如PicData(1 to Width, 1 to Height, 1 to 3),其中比如 PicData(x,y,1)代表第(x,y)坐标上该像素点的Red值,PicData(x,y,2)代表第(x,y)坐标上该像素点的Green值,PicData(x,y,3)代表第(x,y)坐标上该像素点的Blue值,该数组已经填充得有数据了。
如果使用图片框Pic来将数组中的数据保存为图片文件到硬盘上,可以借助比如SetVPexil Pic.hdc ,x,y,RGB(PicData(x,y,1),PicData(x,y,2),PicData(x,y,3)) 或者其他方法,将数组数据画到图片框上,然后再保存为图像文件即可。另外,VB的图片框,当图片文件的长宽像素大于四五千像素时,图片框在AutoRedraw属性为True时,会发生无法创建AutoRedraw对象,而无法处理了。 所以,希望不借助图片框,而采用GDI或者在内存中直接处理完毕就保存为图像文件。
但现在想将该数组直接保存为图片文件到硬盘上,而不需要借助PictureBox,如何才能办到呢? 展开
如果使用图片框Pic来将数组中的数据保存为图片文件到硬盘上,可以借助比如SetVPexil Pic.hdc ,x,y,RGB(PicData(x,y,1),PicData(x,y,2),PicData(x,y,3)) 或者其他方法,将数组数据画到图片框上,然后再保存为图像文件即可。另外,VB的图片框,当图片文件的长宽像素大于四五千像素时,图片框在AutoRedraw属性为True时,会发生无法创建AutoRedraw对象,而无法处理了。 所以,希望不借助图片框,而采用GDI或者在内存中直接处理完毕就保存为图像文件。
但现在想将该数组直接保存为图片文件到硬盘上,而不需要借助PictureBox,如何才能办到呢? 展开
4个回答
展开全部
楼主,光有“图像数据”还不够的,
还要有“图像宽度和高度”这两个参数信息,和“色深信息” 才行。
并且,在VB6.0中,你的“三维数组”不能直接使用,还得转换成“一维”的数组数据。
因为VB6.0用的数组是“安全数组”,它的各维存储顺序跟系统中用到的“真数组”不兼容的。
有了我前面说的那些“信息”后,并且把数据格式转换后,
就可以用GDI+的一系列API来处理了,不用再通过PictureBox,
这样图片的尺寸大小(宽度或高度),基本上不受限制了。
还要有“图像宽度和高度”这两个参数信息,和“色深信息” 才行。
并且,在VB6.0中,你的“三维数组”不能直接使用,还得转换成“一维”的数组数据。
因为VB6.0用的数组是“安全数组”,它的各维存储顺序跟系统中用到的“真数组”不兼容的。
有了我前面说的那些“信息”后,并且把数据格式转换后,
就可以用GDI+的一系列API来处理了,不用再通过PictureBox,
这样图片的尺寸大小(宽度或高度),基本上不受限制了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Bmp的存储方式就是直接存储每个点的rgb值,你去百度一下bmp,到时候写个文件头,然后把rgb按好象是8进制存进去就可以了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议采用最简单的pnm图像格式,自己生成就可以。
先写一个文件头,然后把像素数据写入就可以了。比bmp简单的多。
格式说明可以参考:
http://blog.csdn.net/wellerzhao/article/details/11912739
http://netpbm.sourceforge.net/doc/pgm.html
先写一个文件头,然后把像素数据写入就可以了。比bmp简单的多。
格式说明可以参考:
http://blog.csdn.net/wellerzhao/article/details/11912739
http://netpbm.sourceforge.net/doc/pgm.html
追问
pnm格式不是常用的格式呀。
追答
windows下好像不多见,例如其实人人照片查看器等软件都支持它,所以没有你想象的那么不常用。更何况,在linux的世界里这绝对是常用格式。
当然你可以按另外一位网友说的做bmp,原理一样,格式稍麻烦点。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
从网络读取的图片byte数组转成图片代码如下
Dim mStream As New IO.MemoryStream
mStream.Write(b, 0, b.length) '这里b就是你的一维数组了
Dim Img As New Bitmap(mStream)
mStream.Close()
mStream.Dispose()
Dim mStream As New IO.MemoryStream
mStream.Write(b, 0, b.length) '这里b就是你的一维数组了
Dim Img As New Bitmap(mStream)
mStream.Close()
mStream.Dispose()
追问
我的不是一维,而是三维数组的呀。
另外,不是vb.net,而是vb6呢。要保存为文件放到硬盘上呀,你这并没有保存动作呀。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询