• *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
  • 相关阅读:
    知识积累
    路由层
    数据表记录的增删改查
    连接数据库
    django数据请求
    力扣(LeetCode) 509. 斐波那契数
    力扣(LeetCode)69. x 的平方根
    力扣(LeetCode) 104. 二叉树的最大深度
    力扣(LeetCode) 27. 移除元素
    力扣(LeetCode) 136. 只出现一次的数字
  • 原文地址:https://www.cnblogs.com/dwjaissk/p/905499.html
Copyright © 2020-2023  润新知