glReadPixels无效使用成员(你忘了'&'?)

时间:2013-06-09 12:31:46

标签: c++ qt opengl

当我尝试执行此qt opengl代码时,我是否收到此错误?

    // 4 bytes per pixel (RGBA), 1x1 bitmap
    QVector<unsigned char> pixels( 1 * 1 * 4 );
    glReadPixels( x, height - y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &pixels[0]);

    qDebug() << "r: " << (int)pixels[0];
    qDebug() << "g: "   << (int)pixels[1];
    qDebug() << "b: "   << (int)pixels[2];
    qDebug() << "a: "   << (int)pixels[3];
你能给我一个正确的例子吗?而且我也在寻找将颜色数组粘贴到屏幕像素的反向函数。

2 个答案:

答案 0 :(得分:3)

QVector是一种特殊的代码。 operator[]存在两种变体:const和可修改的变体。使用一个操作员的方式可能变得相当模糊。

无论如何,你不应该在你的情况下使用QVector:过多的开销(调用构造函数,分配内部存储器等)。使用简单的固定大小的范围数组:

// 4 bytes per pixel (RGBA), 1x1 bitmap
GLubyte pixels[4];
glReadPixels( x, height - y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixels);

qDebug() << "r: " << (int)pixels[0];
qDebug() << "g: "   << (int)pixels[1];
qDebug() << "b: "   << (int)pixels[2];
qDebug() << "a: "   << (int)pixels[3];

答案 1 :(得分:1)

在黑暗中拍摄,但由于您在问题中添加了qt标记:height应该是QGLWidget::height()吗?如果是这样,你需要实际调用方法:)

glReadPixels( x, height() - y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixels);