美文网首页
OpenGL-原始图像数据

OpenGL-原始图像数据

作者: Tobesky | 来源:发表于2019-05-24 10:18 被阅读0次

    像素包装

    • 出于性能考虑,一副图像的每一行都应该从一个特定字节对齐地址开始(空间换时间),绝大多数编译器会自动把变量和缓冲区放置在一个针对该架构对齐优化的地址上

    • Windows中的RMP文件格式的像素数据使用4字节排列;Targa(TGA)文件格式是1个字节排列的,相比较而言TGA格式会更加节省空间

    // 改变或恢复像素的储存方式:
    void glPixelStorei(GLenum pname,GLint param);
    void glPixelStoref(GLenum pname,GLfloat param);
    
    /* 举例:假如我们想要改成紧密包装像素数据,应该调用
    GL_UNPACK_ALIGNMENT:制定ruhr从数据缓冲区中解包图像数据
    */
    glPixelStorei(GL_UNPACK_ALIGNMENT,1);
    
    

    像素图

    • 从内存布局上看,像素图与位图非常相似,但是每个像素都需要一个以上的储存位来表示。

    • 亮度/颜色分量值:每个像素的附加位允许储存强度(intensity,即luminance的值)

    • 下面的函数可以将颜色缓冲区的内容作为像素图直接读取

    /*
    x,y制定为举行左下角的窗口坐标,然后制定矩形的width和height值(像素形式)。如果颜色缓冲区储存的数据与我们要求的不同,OpenGL将负责进行必要的转换。
    *pixels必须是合法的
    format制定piels指向的数据元素的颜色布局
    type解释参数*pixels指向的数据,他告诉OpenGL使用缓存区中的什么数据类型来存储颜色分量
    */
    void glReadPixels(GLint x,GLint y,GLSizei width,GLSizei height,
    GLenum format,GLenum type,const void *pixels);
    

    glReadPixels从图形硬件中复制数据,通常通过总线传输到系统内存

    像素格式

    • 已包装的像素格式将颜色数据压缩到了尽可能少的储存位中,每个颜色通道的位数显示在常量中

    • glReadPixels函数读取操作:

      • 双缓冲区的渲染环境下:后台缓冲区进行
      • 单缓冲区渲染环境下:前台缓冲区进行
    • 改变像素操作的源

    void glReadBuffer(GLenum mode);
    

    像素保存

    glWriteTGA函数来将屏幕图像保存为一个Targa(TGA)文件

    像素读取

    读取Targa文件以备OpenGL使用的函数

    相关文章

      网友评论

          本文标题:OpenGL-原始图像数据

          本文链接:https://www.haomeiwen.com/subject/cxiwzqtx.html