如何取得图片的二进制数据?

900126 2008-01-31 12:29:20
如何把PICTURE里边的图片送入字节数组(BYTE)?
效果就相当于用SavePicture把图片保存到文件,然后用字节数组(BYTE)读出文件。
经过文件来得到数组的方法虽然可以,但磨损磁盘总是不好。
...全文
551 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
900126 2008-02-21
  • 打赏
  • 举报
回复
7楼答案可以。虽然不能生成文件字节,但可以发送数组到服务器,由服务器生成图片,然后再用SAVEPICTURE保存下来。
CrazyNPC 2008-02-17
  • 打赏
  • 举报
回复
尝试用Stream对象了么?
900126 2008-02-17
  • 打赏
  • 举报
回复
我的目的是把图片以字节方式传送给服务器保存,如果是存在本地,就直接使用savepicture了。
熊孩子开学喽 2008-02-13
  • 打赏
  • 举报
回复
用SavePicture把图片保存到文件,然后用字节数组(BYTE)读出文件,不一定就直接是你显示出来的图片信息。
只有真彩位图才会把图片的象素信息直接存放在BMP文件里面。

因此,如果楼主是为了要做图像处理的话,是不能直接用二进制方式读取文件的。

所以从题目来看,要么楼主还没有去了解过各种图片文件的格式,要么楼主并非是为了做图像处理。



如果真的是因为不了解图片文件格式而发生了误解,楼主确实是为了做图像处理的话,可以参考我的BLOG,或许对你有所帮助:http://writeblog.csdn.net/?_t_=fcl72me4
tzwsoho 2008-02-02
  • 打赏
  • 举报
回复
http://blog.cnii.com.cn/?92337/viewspace-14474.html
sandy_zc_1 2008-02-01
  • 打赏
  • 举报
回复
楼上的还是一样,缺少BITMAPFILEHEADER。不是最终的位图文件信息。

你必须自己填BITMAPFILEHEADER这个结构并放到字节流里面去才行。除非你用文件映射,那个更麻烦。
东方之珠 2008-02-01
  • 打赏
  • 举报
回复
我已经试过了,可以直接将picture送入字节数组。
'本程序演示将JPG文件显示在picture1中,并将picture1保存到一维数组中,再将一维数组还原成图像到picture2中
'在Form1上添加2个图片框picture1、picture2,1个命令按钮command1
'事先在picture1中装入一张JPG图片,picture2.width=picture1.width,然后picture2.height=picture1.height
Option Explicit

Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long

Private Type BITMAP
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type
Dim PictureBits() As Byte, PictureInfo As BITMAP, iBit As Long

Private Sub Form_Load()
Picture1.Picture = LoadPicture("d:\131431.jpg")
Picture2.Width = Picture1.Width
Picture2.Height = Picture1.Height
End Sub

Private Sub Command1_Click()
GetObject Picture1.Image, Len(PictureInfo), PictureInfo
ReDim PictureBits(1 To PictureInfo.bmWidthBytes * PictureInfo.bmHeight) As Byte
GetBitmapBits Picture1.Image, UBound(PictureBits), PictureBits(1)
SetBitmapBits Picture2.Image, UBound(PictureBits), PictureBits(1) '将数组还原成图像
Picture2.Refresh
End Sub
900126 2008-01-31
  • 打赏
  • 举报
回复
哦,我还真没有从剪贴板使用过copymemory,能否给写个代码啊?
包括CopyMemory里边的参数如何取得。
东方之珠 2008-01-31
  • 打赏
  • 举报
回复
1、保存到剪贴板:
Clipboard.Clear
Clipboard.SetData(Picture1.image)
2、保存到数组用CopyMemory函数:

东方之珠 2008-01-31
  • 打赏
  • 举报
回复
用不着SavePicture。
1、将Picture保存到剪贴板就可以了;
2、然后从剪贴板保存到数组即可。



900126 2008-01-31
  • 打赏
  • 举报
回复
是啊,刚检查了,拷贝到剪贴板的确没什么用处。难道就没有办法了吗?
或者可以用savepicture将文件保存到虚拟硬盘?怎么能建立一个临时的虚拟硬盘?
sandy_zc_1 2008-01-31
  • 打赏
  • 举报
回复
你从剪贴板里面读到的数据不是最终的位图文件信息。和SavePicture后读取出来的数据是不一样的。没有BITMAPFILEHEADER。
而且保存到剪贴板的方法貌似和保存到硬盘上的方法一样拐弯抹角。
900126 2008-01-31
  • 打赏
  • 举报
回复
关键是图片的二进制长度是多少啊?
copymemory RR(0),clipboard.getdata,???
这个数据(???)从哪里来?

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧