QT中的容器
QT中的容器跟C++容器的用法几乎一模一样
1.对比
- vector QVector
- set QSet
- list QList
- map QMap
- stack QStack
- queue QQueue
QT中的摄像头显示
1. 涉及到类
QT += multimedia
QT += multimediawidgets
QCameraInfo //获取当前系统所有的摄像头信息
QCamera //表示摄像头对象
QVideoWidget //表示摄像头拍摄画面的显示窗口
2. 思路和步骤
(1)获取当前系统中所有的摄像头信息
[static] QList<QCameraInfo> QCameraInfo::availableCameras()
返回值:容器,存放了所有的摄像头信息
QString QCameraInfo::description() const
返回值:摄像头的描述信息
QString QCameraInfo::deviceName() const
返回值:摄像头的设备名称
(2)定义QCamera对象
QCamera::QCamera(const QByteArray &deviceName)
参数:依据摄像头的设备名字构造一个摄像头对象
(3)准备好摄像头显示需要用到的窗口(创建QVideoWidget对象跟你在ui中拖过来的QWidget绑定在一起)
QVideoWidget::QVideoWidget(QWidget *parent = nullptr)
参数:parent --》把你在ui中拖过来的QWidget对象作为实参
把摄像头跟窗口也绑定((照相机的)取景器):
void QCamera::setViewfinder(QVideoWidget *viewfinder)
参数:viewfinder--》你刚才准备好的那个窗口
调整窗口的大小,让窗口给QWidget大小保持一致
void QWidget::resize(int w, int h)
显示窗口
void QWidget::show()
启动摄像头
void QCamera::start()
(4)关闭摄像头
void QCamera::stop()
3.QT中的摄像头类和代码不能在ARM平台上运行
原因:QT的摄像头类不支持V4L2架构
V4L2摄像头代码融入到QT工程中
项目阶段(在开发板上运行):需要用到摄像头
1.思路
跟QT控制硬件的思路类似,把摄像头代码(C语言)改写成C++(封装成C++的一个类)
笔试题+复习
1.C++关键字
explicit //禁止隐式转换
父类指针=子类对象的地址
2.笔试题
int a=1;
int b=0;
int c=(a,b++); // (a,b++)逗号表达式,从左到右计算,最终式子的结果由最右边的式子决定
a? b? c?
1 1 1
1 1 0
jpeg库的移植和使用
1.libjpeg移植【资源会在本基础教程编写完时公布,需要有序整理。】
(1)解压jpeg的源码包,然后执行configure
./configure --prefix=/home/gec/xxx CC=arm-linux-gcc --host=arm-linux --enable-shared --enable-static
--prefix 指定编译得到的库文件,头文件所在的位置
--enable-shared 生成动态库
--enable-static 生成静态库
(2)make && make install
make 编译库
make install 把编译产生的库文件头文件安装到第一步你指定的目录下
2. 使用jpeg库提供的接口函数显示jpg图片
jpg图片的背景知识:jpg图片采用特殊的算法压缩过,占用的存储空间很小,很适合在网络上传输
大致思路:jpg原始数据还原出来(解压缩) –》得到原始的RGB数据–》原始的RGB转换成ARGB填充到开发板的lcd上
3.显示思路
第一步:定义解压缩结构体变量和处理错误的结构体变量,并初始化
struct jpeg_decompress_struct 解压缩结构体
{
image_width; //图片宽
image_height; //图片高
num_components; //图片的色深(3个字节),每个像素点占用的字节数
err; //保存jpeg_std_error()返回值
}
jpeg_create_decompress(cinfo)
参数:cinfo --》解压缩结构体指针
struct jpeg_error_mgr 处理错误的结构体
{
}
jpeg_std_error(structjpeg_error_mgr * err);
参数:err --》保持错误信息的结构体指针
第二步:指定解压缩数据源
fopen(你要显示的那张jpg图片)
jpeg_stdio_src(j_decompress_ptrcinfo, FILE * infile);
参数:cinfo --》解压缩结构体指针
infile --》你刚才打开的那张图片
第三步:读取jpg图片的头信息
jpeg_read_header(j_decompress_ptr cinfo,booleanrequire_image)
参数:cinfo --》解压缩结构体指针
require_image --》true
第四步:开始解压缩得到jpg原始的RGB数据
jpeg_start_decompress(j_decompress_ptr cinfo);
参数:cinfo --》解压缩结构体指针
第五步:关键步骤,读取解压缩得到的RGB数据,把数据填充到开发板的lcd上
jpeg_read_scanlines(j_decompress_ptr cinfo, JSAMPARRAY scanlines,JDIMENSION max_lines)
参数:cinfo --》解压缩结构体指针
scanlines --》存放读取到解压缩后的RGB数据
max_lines --》你读取多少行RGB数据,一般一次读取一行
char*buf=malloc(一行RGB数据大小);
for(i=0; i<图片高; i++)
{
jpeg_read_scanlines(&mydem,&buf,1); //一次读取一行
//立马把buf中的一行RGB数据填充到开发板的lcd上
}
第六步:收尾
jpeg_finish_decompress(j_decompress_ptr cinfo);
jpeg_destroy_decompress(j_decompress_ptr cinfo);
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。