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

Posted

技术标签:

【中文标题】glReadPixels 成员的无效使用(你忘记了 \'&\' 吗?)【英文标题】:glReadPixels invalid use of member (did you forget the '&' ?)glReadPixels 成员的无效使用(你忘记了 '&' 吗?) 【发布时间】:2013-06-09 12:31:46 【问题描述】:

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

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

【问题讨论】:

试试unsigned char pixels[4] 您得到的确切错误是什么? glReadPixels 对成员的使用无效(您忘记了 '&' 吗?) @user1596226 你试过我的建议了吗?你有同样的错误吗? 【参考方案1】:

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];

【讨论】:

【参考方案2】:

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

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

【讨论】:

好点,除非 height 实际上是一个变量,即小部件高度 (height = QGLWidget::height();)。

以上是关于glReadPixels 成员的无效使用(你忘记了 '&' 吗?)的主要内容,如果未能解决你的问题,请参考以下文章

成员函数的无效使用(你忘记了“()”吗?)

成员的无效使用(您是不是忘记了«&»?)

glReadPixels 与 glPixelStore 的使用

PixelBuffer对象和Android上的glReadPixel(ARCore)阻塞

OpenGL glReadPixels 性能

Android(ARCore)阻塞上的PixelBuffer对象和glReadPixel