在旧版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,但是提供的解决方案仅将像素数据存储在数组中。
答案 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
。
您将需要BITMAPINFO
,BITMAPINFOHEADER
等的定义,但这听起来好像您已经有了这些定义。