在 QGlWidget 中使用 openGLES 显示图像
Show image using openGLES in QGlWidget
void GLMouseWidget::paintGL(QImage* data)
{
//glClear(GL_COLOR_BUFFER_BIT);
//gldata = QGLWidget::convertToGLFormat(*data);
//glDrawPixels(data->width(), data->height(), GL_RGBA, GL_UNSIGNED_BYTE, gldata.bits());
}
此代码在支持 OpenGL 但不支持 OpenGL ES1 的显卡下运行良好。我读过我应该尝试使用纹理,但到目前为止我失败了。有人可以分享代码片段吗?我的图像是灰色循环的 (QImage::Format_Indexed8),我需要 +- 高效的代码片段,只是为了在 QGLWidget 上显示图像。
这就是在 qt4 中执行此操作的方法。
GLMouseWidget::GLMouseWidget( int camWidth,int camHeight, QWidget* parent, Qt::WindowFlags f )
: QGLWidget( parent, 0, f )
{
qrf = QRectF (0.0f,0.0f,(float)camWidth,(float)camHeight);
//qrf = QRectF (0.0f,0.0f,800.0f,600.0f);
}
void GLMouseWidget::setNewFrame(QImage *image_){
glimage = QGLWidget::convertToGLFormat(*image_);
textureId = bindTexture(glimage);
}
void GLMouseWidget::paintGL()
{
drawTexture(qrf, textureId);
}
void GLMouseWidget::resizeGL(int w, int h)
{
glViewport (0, 0, w, h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
glOrtho(0, w,0,h,-1,1);
glMatrixMode (GL_MODELVIEW);
}
你从 class 中呼叫
*img = cvMatToQImage(frame);
label->setNewFrame(img);
label->update();
void GLMouseWidget::paintGL(QImage* data)
{
//glClear(GL_COLOR_BUFFER_BIT);
//gldata = QGLWidget::convertToGLFormat(*data);
//glDrawPixels(data->width(), data->height(), GL_RGBA, GL_UNSIGNED_BYTE, gldata.bits());
}
此代码在支持 OpenGL 但不支持 OpenGL ES1 的显卡下运行良好。我读过我应该尝试使用纹理,但到目前为止我失败了。有人可以分享代码片段吗?我的图像是灰色循环的 (QImage::Format_Indexed8),我需要 +- 高效的代码片段,只是为了在 QGLWidget 上显示图像。
这就是在 qt4 中执行此操作的方法。
GLMouseWidget::GLMouseWidget( int camWidth,int camHeight, QWidget* parent, Qt::WindowFlags f )
: QGLWidget( parent, 0, f )
{
qrf = QRectF (0.0f,0.0f,(float)camWidth,(float)camHeight);
//qrf = QRectF (0.0f,0.0f,800.0f,600.0f);
}
void GLMouseWidget::setNewFrame(QImage *image_){
glimage = QGLWidget::convertToGLFormat(*image_);
textureId = bindTexture(glimage);
}
void GLMouseWidget::paintGL()
{
drawTexture(qrf, textureId);
}
void GLMouseWidget::resizeGL(int w, int h)
{
glViewport (0, 0, w, h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
glOrtho(0, w,0,h,-1,1);
glMatrixMode (GL_MODELVIEW);
}
你从 class 中呼叫
*img = cvMatToQImage(frame);
label->setNewFrame(img);
label->update();