0

当我尝试执行此 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];

你能给我一个正确的例子吗?我也在寻找将一组颜色粘贴到屏幕像素的反向函数。

4

2 回答 2

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];
于 2013-06-09T12:40:12.267 回答
1

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

glReadPixels( x, height() - y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
于 2013-06-09T15:41:25.910 回答