#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() );
}
}
qt 环境下 显示gif或者采集相机数据 并显示
5星 · 超过95%的资源 需积分: 9 169 浏览量
2016-12-05
17:28:25
上传
评论 1
收藏 895KB ZIP 举报
疯子痞
- 粉丝: 4
- 资源: 5
最新资源
- 基于python实现的基于PyQt5和爬虫的小说阅读系统.zip
- 机械设计整经机上纱自动化sw20非常好的设计图纸100%好用.zip
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈