如何在VB6中将PictureBox中的BMP图像转换为字节数组

时间:2019-03-07 00:56:23

标签: arrays vb6 picturebox memorystream bmp

在旧版VB6应用程序中,我在PictureBox中存储了一个BMP图像。我可以使用以下命令将其保存到BMP文件中:

>>> import pandas as pd
>>> 
>>> data = ['A', 'A', 'A', 'B', 'C', 'C', 'D', 'D', 'D', 'D', 'D']
>>> 
>>> pd.Series(data).value_counts()
D    5
A    3
C    2
B    1
dtype: int64

不过,我想要的是将PictureBox中的BMP图像保存到字节数组中。我需要存储整个BMP,包括BMP标头。实际上,我希望将要写入BMP文件的数据相同,但要以字节数组的形式,而不必读写磁盘文件。

我已经搜索过,但没有找到任何可解决此特定问题的在线信息。


我确实找到了一个建议写入MemoryStream的link。所以我尝试了这个:

  SavePicture picBox.Picture, "BmpImage.bmp"

但是这不能编译。我为“ System.IO.MemoryStream”得到了“未定义用户定义的类型” 。我已将System包含在引用列表中。我也尝试过声明为 New MemoryStream ,但仍然收到“未定义用户定义类型”编译器错误。


我也看过similar question,但是提供的解决方案仅将像素数据存储在数组中。

2 个答案:

答案 0 :(得分:1)

如果您确实希望将BMP文件的确切内容作为字节数组,为什么不逐步进行操作呢?

步骤1:使用SavePicture写入临时文件。

第2步:使用常规文件I / O操作将临时文件读回到阵列中。

第3步:删除临时文件

答案 1 :(得分:1)

GDI32中有一些函数可以简化从图像获取数组的过程。我无法在此处发布工作代码,因为我已经使用自定义类型等在汇编中编写了大量代码,但是我可以告诉您从GetDIBits()开始搜索,其中“ DI”代表“设备无关”。

这里是一个声明:

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

您将需要BITMAPINFOBITMAPINFOHEADER等的定义,但这听起来好像您已经有了这些定义。