zoukankan      html  css  js  c++  java
  • *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
  • 相关阅读:
    Appium安装教程
    方法(method)和函数(function)有什么区别?
    FTP两种工作模式:主动模式(Active FTP)和被动模式介绍
    python socket编程介绍
    面向对象基础篇
    python fishc.homework2
    python遇到的问题汇总
    我对 python 面向对象的理解
    深入理解JVM(五)JVM优化策略
    深入理解JVM(四)JVM性能监控与故障处理工具
  • 原文地址:https://www.cnblogs.com/dwjaissk/p/905499.html
Copyright © 2011-2022 走看看