贴下部分主要代码,问题描述,第一个函数是抓取线程函数,当捕捉到图像时,触发第二个函数(事件函数),可通过 ptrGrabResult->GetBuffer()得到图像buffer,然后赋给image1,然后调用update显示视频,但是总是出现segament fault,如果去掉 显示语句painter.drawImage(QPoint(20,20), image1);就不会出错,相机帧率可以调节,个人感觉好像是qt刷新频率跟不上抓取,导致painter还没来得及画指针 ptrGrabResult->GetBuffer()指向的buffer时,buffer就又被改变了,不知道是不是这个问题,,我在pc上跑是不会有问题的,但在arm跑就会有问题,不知道是不是arm上painter画图速率跟不上,,请问大虾们有什么指教的么,如果是我想的那样该怎样解决,我已经把帧率调到30fps了,,
/*抓取线程*/
while ( camera.IsGrabbing())
{
// Wait for an image and then retrieve it. A timeout of 5000 ms is used.
camera.RetrieveResult( 5000, ptrGrabResult, TimeoutHandling_ThrowException);
}
/*事件函数*/
void Widget::OnImageGrabbed(CInstantCamera& camera,const CGrabResultPtr& ptrGrabResult)
{
// Image grabbed successfully?
if (ptrGrabResult->GrabSucceeded())
{
image1=QImage((uint8_t *) ptrGrabResult->GetBuffer(), 656,494,QImage::Format_Indexed8);
}
else
{
cout << "Error: " << ptrGrabResult->GetErrorCode() << " " << ptrGrabResult->GetErrorDescription();
}
}
/*显示函数*/
void Widget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
image1.setColorTable(grayTable);
painter.drawImage(QPoint(20,20), image1);
}