在挂架API的c++文档中,他们使用一个循环来显示抓取的图像。此代码运行良好:
//Basler Pylon示例
main()
{
CInstantCamera camera(
CTlFactory::GetInstance().CreateFirstDevice());
camera.StartGrabbing( c_countOfImagesToGrab);
while ( camera.IsGrabbing())
{
// Wait for an image and then retrieve it. A timeout of
5000 ms is used.
camera.RetrieveResult( 5000, ptrGrabResult,
TimeoutHandling_ThrowException);
Pylon::DisplayImage(1, ptrGrabResult);
}
}
在我的应用程序中,我通过实现UseBasler类来使用API,它在构造函数中实例化相机,然后使用一个函数一次显示一帧:
class UseBasler()
{
public:
CInstantCamera* camera;
void DisplayOneFrame();
}
UseBasler::UseBasler()
{
camera = new CInstantCamera(CTlFactory::GetInstance().CreateFirstDevice());
camera->StartGrabbing( c_countOfImagesToGrab);
}
void UseBasler::DisplayOneFrame()
{
if ( camera->IsGrabbing())
{
// Wait for an image and then retrieve it. A timeout of 5000 ms is used.
camera->RetrieveResult( 5000, ptrGrabResult, TimeoutHandling_ThrowException);
//Display image
}
}
我在行的DisplayFrame功能中遇到Acces违规
camera->RetrieveResult(5000,ptrGrabResult,TimeoutHandling_ThrowException(;
我很感激你能告诉我为什么会崩溃。顺便说一句,当我将调用转移到函数RetrieveResult时在我创建相机后,我没有遇到这种崩溃。
您的包装类实现未命中Pylon::CGrabResultPtr-ptrGrabResult声明。将其制成私人类字段。
我很乐意在析构函数上添加一些清理,比如camera->Close((。一般来说,您的类实例持有对真实设备的访问权限,该设备有时可能会断开连接。Pylon API为您提供了几个选项来跟踪这些将由包装器实现的更改。