各位大虾,本人用QT+工业网口相机播放视频,用相机获取到图像后再QLabel播放,但是很卡顿,因为之前没做过类似的,不知道如何下手,我是用信号槽来传送图像的,参数是一个QImage对象(不知道是否是这个原因导致它很卡顿),,我听别人说用共享内存来做,但是不太清楚大概是怎样的流程。以下是主要的代码片段。
int width = 659;
int height =494;
int w_8=(659*8+31)/32*4; //
QSize colourImgSize2(660,494);
QVector<QRgb> grayTable;
for(int i = 0; i < 256; i++)
grayTable.push_back(qRgb(i,i,i));
QImage desImage = QImage(colourImgSize2, QImage::Format_Indexed8);
uchar* transData=desImage.bits();
while ( camera.IsGrabbing())
{
// Wait for an image and then retrieve it. A timeout of 5000 ms is used.
camera.RetrieveResult( 5000, ptrGrabResult, TimeoutHandling_ThrowException);
printf("Grabbing\n");
// Image grabbed successfully?
if (ptrGrabResult->GrabSucceeded())
{
unsigned char *colourImgDataPtr = (uint8_t *) ptrGrabResult->GetBuffer();
//因为图像659*494的,所以转换要转换成4字节的倍数660
for(int i = 0; i < height; i++)
{
for(int j = 0; j < width; j++)
{
*transData=*colourImgDataPtr;
transData++;
colourImgDataPtr++;
}
transData++;
*transData=150;
}
desImage.setColorTable(grayTable);
emit log(sMessage,&desImage);//发射函数
#ifdef PYLON_WIN_BUILD
// Display the grabbed image.
Pylon::DisplayImage(1, ptrGrabResult);
#endif
}
else
{
sMessage="Error: "+QString::number(ptrGrabResult->GetErrorCode(),10);
}
}
}
catch (GenICam::GenericException &e)
{
}