#include "widget.h"
#include <QGLWidget>
#include "myvideosurface.h"
Widget::Widget(QWidget *parent)
: QOpenGLWidget(parent)
, m_eType(type_gif)
, m_pSurface(NULL)
, m_tex_id(-1)
{
connect(&m_movie, SIGNAL(frameChanged(int)), this, SLOT(slotframeChanged(int)));
//如果你想显示本地相机,请去掉下面代码的注释
//m_eType = type_camera;
}
Widget::~Widget()
{
m_pSurface = NULL;
m_movie.stop();
}
void Widget::startpaint()
{
if(type_gif == m_eType)
{
m_movie.stop();
m_movie.setFileName(":/imageexample1.gif");
m_movie.start();
}
else if(type_camera == m_eType)
{
if(NULL == m_pSurface)
{
m_pSurface = new MyVideoSurface(this);
connect(m_pSurface, SIGNAL(signalsurfacepaintimage(QImage)), this, SLOT(updatacameraimage(QImage)));
}
m_pSurface->slotstartcamera();
}
}
void Widget::slotframeChanged(int frame)
{
Q_UNUSED(frame);
m_image = m_movie.currentImage();
update();
}
void Widget::updatacameraimage(QImage image)
{
m_image = image;
update();
}
QSize Widget::sizeHint() const
{
return QSize(640, 480);
}
void Widget::initializeGL()
{
initializeOpenGLFunctions();
}
void Widget::paintGL()
{
if(m_image.isNull())
return;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//开启纹理;
glEnable(GL_TEXTURE_2D);
paintglid();
glBegin(GL_QUADS);
glTexCoord2f(0.0f,0.0f);
glVertex2f(-1.0f,-1.0f);
glTexCoord2f(1.0f, 0.0f);
glVertex2f(1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex2f( 1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex2f( -1.0f, 1.0f);
glEnd();
}
void Widget::resizeGL(int w, int h)
{
Q_UNUSED(w);
Q_UNUSED(h);
}
void Widget::paintglid()
{
QImage tex = m_image.mirrored();
//tex = QGLWidget::convertToGLFormat(m_image);
if(-1 == (int)m_tex_id)
{
glGenTextures(1, &m_tex_id);
//绑定纹理
glBindTexture(GL_TEXTURE_2D, m_tex_id);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
//绘制图片;
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, tex.width(), tex.height(), 0,
GL_RGBA, GL_UNSIGNED_BYTE, tex.bits() );
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
}
else
{
glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex.width(), tex.height(),
GL_RGBA, GL_UNSIGNED_BYTE, tex.bits() );
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
qtwidgetpaint.zip (11个子文件)
qtwidgetpaint
qtrc.qrc 96B
qtwidgetpaint.pro 494B
videoqmlsurface.h 787B
myvideosurface.cpp 912B
qtwidgetpaint.pro.user 23KB
widget.h 820B
videoqmlsurface.cpp 2KB
main.cpp 184B
myvideosurface.h 532B
imageexample1.gif 903KB
widget.cpp 3KB
共 11 条
- 1
资源评论
- littletooth2017-03-27qt如果想显示相机的视频流,必须使用QAbstractVideoSurface吗?一般的QWidget不行?
- qq_228490872018-01-25这个框架对我们很有帮助
疯子痞
- 粉丝: 4
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功