快速读写Bmp图片
来源:互联网 发布:数据报表软件 编辑:程序博客网 时间:2024/04/30 01:26
一、使用MS的stdPicture对象创建一个实体,一般为LoadPicture(FileName)
二、得到stdPicture对象的数据信息
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
GetObjectAPI lpPic, Len(bmp), bmp ' lpPic As StdPicture
三、创建一个安全数组,通过CopyMemory强行修改数据指针指向lpPic的数据
首先看看VB或者叫做COM里面的安全数组,
感谢 lioomany VB指针葵花宝典之SafeArray
在VB里我们传递一个数组时,传递的实际上COM里的SafeAraay结构指构的指针,SafeAraay结构样子如下:
Private Type SAFEARRAY
cDims As Integer '这个数组有几维?
fFeatures As Integer '这个数组有什么特性?
cbElements As Long '数组的每个元素有多大?
cLocks As Long '这个数组被锁定过几次?
pvData As Long '这个数组里的数据放在什么地方?
'rgsabound() As SFArrayBOUND
End Type
紧接在pvData这后的rgsabound是个真数组,所以不能在上面的结构里用VB数组来声明,记住,在VB里的数组都是SafeArray,在VB里没有声明真数组的方法。 不过这不是问题,因为上面SFArrayBOUND结构的真数组在整个SAFEARRAY结构的位置是不变的,总是在最后,我们可以用指针来访问它。SFArrayBOUND数组的元素个数有cDims个,每一个元素记录着一个数组维数的信息,下面看看它的样子:
Private Type SAFEARRAYBOUND
cElements As Long '这一维有多少个元素?
lLbound As Long '它的索引从几开始?
End Type
对于二维数组的话就是rgsabound(0),rgsabound(1)了,所以我们的创建如下:
dim sa as SAFEARRAY,data() as Byte
With sa
.cbElements = 1
.cDims = 2
.Bounds(0).lLbound = 0
.Bounds(0).cElements = bmp.bmHeight
.Bounds(1).lLbound = 0
.Bounds(1).cElements = bmp.bmWidthBytes
.pvData = bmp.bmBits
End With
' copy bitmap data into byte array
CopyMemory ByVal VarPtrArray(data), VarPtr(sa), 4
使data->sa结构即可!!!
不过请你千万记得要自己销毁指针,呵呵,既然享受了指针的好处,也要记得对指针负责哦;-) PS:这里指针可以理解为MM
文章摘自http://blog.gameres.com/thread.asp?BlogID=404&;threadid=43939
- 快速读写Bmp图片
- BMP图片读写接口函数
- Bmp 格式的 图片文件读写
- C语言读写BMP格式图片
- 读写BMP
- C语言实现BMP格式图片的读写
- opencv快速读写大量图片的方法
- BMP 文件的读写
- 读写BMP文件
- c++ 读写bmp
- BMP图像文件的读写
- VC_读写bmp方式
- bmp文件的读写
- 读写BMP图
- BMP文件的读写
- c++ 读写BMP
- BMP文件读写
- BMP文件读写
- 磁盘操作与管理[转帖]
- Visual Basic变态用法之函数指针
- 结构在优化编译中的对齐问题
- vi编辑 utf-8文件
- 错误代码说明一览表
- 快速读写Bmp图片
- 一个关于乘法溢出问题的探讨
- 方程的解数(哈希表的应用)
- 卖书...
- ajax 框架 (client)
- 返回系统任务栏高度
- comdlg32打开对话框的最终解决方案
- Cocoa 3 Run Loop (event loop)
- 关于模拟大数溢出的解决方案————加法篇