由于答应帮朋友搞出来,周末就在踢球前弄了几个小时,VB也就在大学做课程设计的时候有用过一点,现在几乎忘记完拉-_-#!(当初还跟朋友讲,找到c++的代码修改成VB就好了,现在想象还真没那么简单)
起初是想从网络上找份原代码来修改下就好拉,可是没找到,也许是我Google baidu的能力不够强,最后觉得自己按照C++的来改。找到OpenGL超级宝典上的例子(好象是在240页的一个例子)尝试转换成VB代码。但是这其中遇到点郁闷事 VB中的很多数据类型 根本没办法 跟c.c++转换,比如传指针 引用的 根本不知道怎么转成VB的代码,还有就是其中 有个"MB"的数据要付值给header.bfType 这个表示了该二进制文件是BMP文件
可是VB不能传"MB" 最后没办法就直接用转换好的数字类给了19778;
还有就是VB没有sizeof函数,数据 对象的大小必须自己算,天啊 查了好多资料哦。(再次寒一下以前说简单的时候....)
方法简单实现如下:
Public Function Save()
Dim bits(922080) As GLubyte
Dim info As BITMAPINFO
glPixelStorei pxsPackAlignment, 4
glPixelStorei pxsPackRowLength, 0
glPixelStorei pxsPackSkipRows, 0
glPixelStorei pxsPackSkipPixels, 0
glReadPixels 0, 0, 640, 480, rpBGRExt, pxlByte, bits(0)
info.bmiHeader.biSize = 40
info.bmiHeader.biWidth = 640
info.bmiHeader.biHeight = 480
info.bmiHeader.biPlanes = 1
info.bmiHeader.biBitCount = 24
info.bmiHeader.biCompression = BI_RGB
info.bmiHeader.biSizeImage = 922080
info.bmiHeader.biXPelsPerMeter = 2952
info.bmiHeader.biYPelsPerMeter = 2952
info.bmiHeader.biClrUsed = 0
info.bmiHeader.biClrImportant = 0
Dim width As Long
Dim infoSize As Long
Dim size As Long
Dim bitSize As Long
Dim header As BITMAPFILEHEADER
width = 640 * 3
width = (width + 3) And (-3)
bitSize = width * 480
infoSize = 40
size = 16 + infoSize + bitSize
' 写入header内容
header.bfType = 19778
header.bfSize = size
header.bfReserved1 = 0
header.bfReserved2 = 0
header.bfOffBits = 16 + infoSize
Open "test.bmp" For Binary As #100
Put #100, , header
Put #100, , info
Put #100, , bits
Close #100
End Function