*VB中实现OpenGL的截屏(glReadPixels)

由于答应帮朋友搞出来,周末就在踢球前弄了几个小时,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
原文地址:https://www.cnblogs.com/dwjaissk/p/905499.html