最近在做saa7113多通道视频拼接实验,一路磕磕碰碰出现各种问题,加上Qt又是新手,诸多问题不知道怎样解决,再次请教各位,希望能够提供一点思路
问题:我现在提取saa7113 4个通道的图像之后进行拼接(类似监控系统那样的画面拼接),然后再将图像贴到QLabel上显示,照说问题不会太难,但是总是出现闪屏,画面很混乱。网上查到的结果提示可能使用双缓冲区可以闪屏问题,但是Qt4每个显示控件都是具有双缓冲区的!早上试着利用双缓冲区看看能不能解决问题,结果画面没有任何显示,现在更加头疼了。我想问题应该就是出现窗体刷新和图像缓冲区上,但我不知道怎样解决!!
希望有人能指点一二,代码如下:- //定时器读取图像数据
- void TQCamera::GetImage()
- {
- switch(switchc)
- {
- case 0:
- if(!(g_pCamera->GetBuffer(pp_buf)))
- printf("GetBuffer Error: left_buf");
- break;
- case 1:
- if(!(g_pCamera->GetBuffer(pp_buf)))
- printf("GetBuffer Error: right_buf");
- break;
- case 2:
- if(!(g_pCamera->GetBuffer(pp_buf)))
- printf("GetBuffer Error: front_buf");
- break;
- case 3:
- if(!(g_pCamera->GetBuffer(pp_buf)))
- printf("GetBuffer Error: back_buf");
- break;
- default: break;
- }
- if((switchc++)==4)
- {
- ready=1;
- // m_pTimer2->stop();
- switchc=0;
- memcpy(preview_buf, share_buf, sizeof(share_buf)); // 复制内存图像到预览缓冲区上
- }
- g_pCamera->JointImages2(pp_buf,share_buf,switchc);
- g_pCamera->ChannelSet(switchc);
- }
- //定时器刷新图像
- void TQCamera::RefreshImage()
- {
- if(ready==1)
- {
- QImage image;
- format=QImage::Format_RGB16;
- // g_pCamera->JointImages(left_buf,right_buf,front_buf,back_buf,pp_buf,0);
- image = QImage((uchar *) preview_buf, g_iWidth, g_iHeight, format); //QImage::Format_RGB16;
- pixmap = pixmap.fromImage(image);
- m_plbImage->setPixmap(pixmap);
- // m_plbImage->setBackgroundRole(QPalette::NoRole);
- m_plbImage->setFixedSize(g_iWidth, g_iHeight);
- ready=0;
- }
- }
复制代码 注:如果将预览缓冲区 preview_buf换成共享缓冲区share_buf就会出现闪屏,如果不换就没有图像显示 |