首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glReadPixels()“数据”参数用法?

glReadPixels()“数据”参数用法?
EN

Stack Overflow用户
提问于 2012-01-12 19:55:26
回答 3查看 33.1K关注 0票数 17

我试图使用glReadPixels从图像中获取颜色数据。我应该使用glReadPixels,但我似乎搞不清楚。这是一个大得多的项目的一部分,但现在我只想知道如何正确地使用它。

我查了一下,发现了这样的东西:

代码语言:javascript
复制
    void glReadPixels(GLint x, 
       GLint y, 
       GLsizei width, 
       GLsizei height, 
       GLenum format, 
       GLenum type, 
       GLvoid* data);

但我不知道我应该把什么作为最后的论点,当我这样做的时候,我会如何使用它。我真的很感激你的帮助!(例如:如何使用它或如何获取颜色的一个简单例子)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-12 20:36:22

data接受一个指向您为glReadPixels准备的缓冲区的指针,以便将数据放入其中。如下所示:

代码语言:javascript
复制
switch(format) {
case GL_BGR:
case GL_RGB:
    components = 3; break;

case GL_BGRA:
case GL_RGBA:
    components = 4; break;

case GL_ALPHA:
case GL_LUMINANCE:
    components = 1; break;
}

GLubyte *data = malloc(components * width * height);
if( data ) {
    glReadPixels(0, 0, width, height, format, GL_UNSIGNED_BYTE, data);
}
票数 27
EN

Stack Overflow用户

发布于 2012-01-12 20:36:19

用法示例:

代码语言:javascript
复制
#include <GL/glut.h>
#include <iostream>

int mx = 0, my = 0;
void display()
{
    glClearColor( 0, 0, 0, 1 );
    glClear( GL_COLOR_BUFFER_BIT );

    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    glOrtho( -10, 10, -10, 10, -1, 1 );

    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();

    glScalef( 5, 5, 5 );
    glBegin( GL_TRIANGLES );
    glColor3ub( 255, 0, 0 );
    glVertex2f( -1, -1 );
    glColor3ub( 0, 255, 0 );
    glVertex2f( 1, -1 );
    glColor3ub( 0, 0, 255 );
    glVertex2f( 0, 1 );
    glEnd();

    // 4 bytes per pixel (RGBA), 1x1 bitmap
    unsigned char pixels[ 1 * 1 * 4 ] = { 0 };
    glReadPixels( mx, my, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixels );
    std::cout << "r: " << static_cast< int >( pixels[ 0 ] ) << '\n';
    std::cout << "g: " << static_cast< int >( pixels[ 1 ] ) << '\n';
    std::cout << "b: " << static_cast< int >( pixels[ 2 ] ) << '\n';
    std::cout << "a: " << static_cast< int >( pixels[ 3 ] ) << '\n' << std::endl;

    glutSwapBuffers();
}

void mouse( int x, int y )
{
    mx = x;
    my = glutGet( GLUT_WINDOW_HEIGHT ) - y;
    glutPostRedisplay();
}

int main( int argc, char **argv )
{
    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
    glutInitWindowSize( 800, 600 );
    glutCreateWindow( "glReadPixels() example" );
    glutDisplayFunc( display );
    glutPassiveMotionFunc( mouse );
    glutMainLoop();
    return 0;
}

使用鼠标获取像素的RGBA值。

票数 19
EN

Stack Overflow用户

发布于 2012-01-12 19:57:35

data是指向要读取的像素数据的指针。看看一些示例代码,并查看调用上面的几行代码,以了解它们是如何初始化的。通常,它只是一个大小的分配,类似于x * y * depth。你会把它作为&data传递进来。试着读取已知颜色的1x1像素块,看看它会返回什么样的信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8841422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档