在传统的VB6应用程序中,我有一个存储在PictureBox中的BMP图像。我可以使用以下方法将其保存到BMP文件:
SavePicture picBox.Picture, "BmpImage.bmp"
但是我想要的是将PictureBox中的BMP图像保存为字节数组。我需要存储整个BMP,包括BMP头。实际上,我希望将相同的数据写入BMP文件,但是在Byte数组中,而不必写入和读取磁盘文件。
我已经搜索过但没有在网上找到解决这个问题的任何内容。
我找到了一个建议写入MemoryStream的link。所以我尝试了这个:
10 Dim bmpArray() As Byte
20 Dim memStream As New System.IO.MemoryStream
50 SavePicture picBox.Picture, memStream
60 bmpArray = memStream.GetBuffer
但是这不会编译。我为“System.IO.MemoryStream”获得了“用户定义的类型未定义”我在我的参考列表中包含了System。我也尝试声明为New MemoryStream但仍然得到“User-defeind type not defined”编译器错误。
我也看了一下similar question但是提供的解决方案只存储了数组中的像素数据。
如果您确实希望BMP文件的确切内容为字节数组,为什么不逐步执行?
步骤1:使用SavePicture写入临时文件。
步骤2:使用普通文件I / O操作将临时文件读回数组。
第3步:删除临时文件
GDI32
中有一些函数可以很容易地从图像中获取数组。我不能在这里发布工作代码因为我在使用自定义类型等的汇编中写了很多,但我可以告诉你在GetDIBits()
开始你的搜索,'DI'代表Device Independent。
这是一个声明:
Public Declare Sub GetDIBits Lib "gdi32" _
(ByVal hDC As Long, _
ByVal hBitmap As Long, _
ByVal nStartScan As Long, _
ByVal nNumScans As Long, _
ByRef lpBits As Any, _
ByRef lpBI As BITMAPINFO, _
ByVal wUsage As Long)
使用图片框的.hDC
。
你需要BITMAPINFO
,BITMAPINFOHEADER
等的定义,但听起来好像你可能已经有了这些定义。