【问题标题】: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 你试过我的建议了吗?你有同样的错误吗?

标签: c++ qt opengl


【解决方案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();)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    相关资源
    最近更新 更多