在QGlWidget中使用openGLES显示图像

时间:2015-09-23 18:01:25

标签: opengl-es qt4

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 \ 2的卡下工作正常。我已经读过我应该尝试使用纹理,但到目前为止我都失败了。有人可以共享代码段吗?我的图像是灰色循环的(QImage :: Format_Indexed8),我需要+ - 高效的代码片段,只是为了在QGLWidget上显示图像。

1 个答案:

答案 0 :(得分:0)

所以这就是在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);
}

来自课堂外你打电话

*img = cvMatToQImage(frame);
label->setNewFrame(img);
label->update();