• OpenGL学习笔记(14)像素操作


    参考http://www.cnblogs.com/yutianfcl/articles/842414.html

    图像与位图不同的是,图像的每个存储可以存储RGBA颜色

    绘制像素

    绘制一个矩形像素数据

    void glDrawPixels(GLsizei width, GLsizei height, GLenum format,
    GLenum type, const GLvoid *pixels);
    如下示例

    /*    Create checkerboard image    */
    #define    checkImageWidth 64
    #define    checkImageHeight 64
    GLubyte checkImage[checkImageHeight][checkImageWidth][3];
    
    static GLdouble zoomFactor = 1.0;
    static GLint height;
    
    void makeCheckImage(void)
    {
       int i, j, c;
        
       for (i = 0; i < checkImageHeight; i++) {
          for (j = 0; j < checkImageWidth; j++) {
             c = ((((i&0x8)==0)^((j&0x8))==0))*255;
             checkImage[i][j][0] = (GLubyte) c;
             checkImage[i][j][1] = (GLubyte) c;
             checkImage[i][j][2] = (GLubyte) c;
          }
       }
    }
    
    void init(void)
    {    
       glClearColor (0.0, 0.0, 0.0, 0.0);
       glShadeModel(GL_FLAT);
       makeCheckImage();
       glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    }
    
    void display(void)
    {
       glClear(GL_COLOR_BUFFER_BIT);
       glRasterPos2i(0, 0);
       glDrawPixels(checkImageWidth, checkImageHeight, GL_RGB, 
                    GL_UNSIGNED_BYTE, checkImage);
       glFlush();
    }

    首先makeCheckImage函数创建了一个64x64的一个RGB颜色数组,非黑即白
    format与type参数要记得与数组相对应,否则可能会绘制出失帧的图片,效果如下

    image

    缩放图片

    使用glPixelZoom函数可以对图片进行缩放,比如放大3倍glPixelZoom (3, 3);效果如下

    image

    复制图片

    通过glCopyPixels函数进行复制图片,如下代码

    glRasterPos2i(0, 0);
    glDrawPixels(checkImageWidth, checkImageHeight, GL_RGB, GL_UNSIGNED_BYTE, checkImage);
    glRasterPos2i (100, 100);
    glCopyPixels (0, 0, checkImageWidth, checkImageHeight, GL_COLOR);

    将新图像重新定位到100,100然后复制0,0坐标指定高度宽度的矩形
    效果如下

    image

    其行为类似于先glReadPixels然后glDrawPixels

    读取图像数据

    可以使用glReadPixels函数读取指定位置的图像数据,如下代码

    glRasterPos2i(100, 100);
    glReadPixels (0, 0, 32, 32, GL_RGB, GL_UNSIGNED_BYTE,checkImage1);
    glDrawPixels(32, 32, GL_RGB, GL_UNSIGNED_BYTE, checkImage1);

    效果

    image

  • 相关阅读:
    nginx文件类型错误解析漏洞
    js 获取URL中的参数并转换为对象
    postman
    php curl参数详解
    php 两变量值互换 方法
    PHP 命名空间与spl_autoload_register() 自动加载机制
    php命名大小问题
    PHP实现冒泡排序
    使用 PHPStorm + Xdebug 实现断点调试(二)
    TSPL学习笔记(2):过程和变量绑定
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1863575.html
Copyright © 2020-2023  润新知