• *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
  • 相关阅读:
    加载图片出现403的问题
    js字符串首字母大写的不同写法
    vue中使用两个window.onresize问题解决
    vue备用
    vue注册全局组件
    Java中Timer的用法
    笔记本设置wifi热点
    UVA 11401 Triangle Counting
    数论专题---除法表达式之高精度运算,扩展欧几里得算法
    能被2、3、4、5、6、7、8、9整除数的特征
  • 原文地址:https://www.cnblogs.com/dwjaissk/p/905499.html
Copyright © 2020-2023  润新知