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 的使用