//数据类
class PYLONBASE_API CGrabResultData
{
public:
bool GrabSucceeded() const;
String_t GetErrorDescription() const;
uint32_t GetErrorCode() const;
EPayloadType GetPayloadType() const;
EPixelType GetPixelType() const;
uint32_t GetWidth() const;
uint32_t GetHeight() const;
uint32_t GetOffsetX() const;
uint32_t GetOffsetY() const;
uint32_t GetPaddingX() const;
uint32_t GetPaddingY() const;
void* GetBuffer() const;
size_t GetPayloadSize() const;
uint32_t GetFrameNumber() const;
uint64_t GetTimeStamp() const;
bool GetStride( size_t& strideBytes) const;
size_t GetImageSize() const;
intptr_t GetCameraContext() const;
int64_t GetID() const;
int64_t GetImageNumber() const;
int64_t GetNumberOfSkippedImages() const;
bool IsChunkDataAvailable() const;
GenApi::INodeMap& GetChunkDataNodeMap() const;
bool HasCRC() const;
bool CheckCRC() const;
intptr_t GetBufferContext() const;
// Internal use only.
class CGrabResultDataImpl;
CGrabResultDataImpl* GetGrabResultDataImpl();
virtual ~CGrabResultData();
private:
//The grab result data object can not be copied.
CGrabResultData( const CGrabResultData&);
//The grab result data object can not be copied.
void operator = ( const CGrabResultData&);
protected:
friend class CInstantCamera;
CGrabResultData();
private:
friend class CGrabResultDataFactory;
virtual void Destroy();
virtual void Initialize();
CGrabResultDataImpl* m_pImpl;
// The grab result data
const void*& m_pBuffer;
bool& m_grabSucceeded;
uint32_t& m_frameNr;
EPayloadType& m_payloadType;
EPixelType& m_pixelType;
uint64_t& m_timeStamp;
uint32_t& m_width;
uint32_t& m_height;
uint32_t& m_offsetX;
uint32_t& m_offsetY;
uint32_t& m_paddingX;
uint32_t& m_paddingY;
uint64_t& m_payloadSize;
uint32_t& m_errorCode;
String_t& m_errorDescription;
intptr_t& m_cameraContext;
int64_t& m_ID;
int64_t& m_imageNumber;
int64_t& m_skippedImageCount;
intptr_t& m_bufferContext;
};
//指针类
class PYLONBASE_API CGrabResultPtr
{
public:
CGrabResultPtr();
CGrabResultPtr( const CGrabResultPtr& rhs);
CGrabResultPtr& operator = ( const CGrabResultPtr& rhs);
~CGrabResultPtr();
CGrabResultData* operator->() const;
bool IsValid() const;
operator bool() const;
void Release();
operator IImage&() const;
bool IsUnique() const;
class CGrabResultPtrImpl;
CGrabResultPtr& operator = ( const CGrabResultPtrImpl& rhs);
private:
/// Internal use only.
friend class PylonPrivate::CGrabResultDataConverter;
CGrabResultData* GetPtr() const;
mutable CGrabResultPtrImpl* m_pImpl;
CGrabResultData* m_pGrabResultData;
};
//例子,把图片保存到本地
void OnImageGrabbed( CInstantCamera& camera, const CGrabResultPtr& ptrGrabResult)
{
int m_iCount=0;
if ( instant_camera.IsGrabbing())
{
strPicName.Format (bmp_path.c_str(),++m_iCount);
CImagePersistence::Save(ImageFileFormat_Jpeg, (String_t)strPicName, ptrGrabResult);
}
}
//对比直接通过InstantCamera获取图像,OnImageGrabbed函数是自动在拍摄循环中调用的
while ( camera.IsGrabbing())
{
// Wait for an image and then retrieve it. A timeout of 5000 ms is used.
camera.RetrieveResult( 5000, ptrGrabResult, TimeoutHandling_ThrowException);
// Image grabbed successfully?
if (ptrGrabResult->GrabSucceeded())
{
// Access the image data.
cout << "SizeX: " << ptrGrabResult->GetWidth() << endl;
cout << "SizeY: " << ptrGrabResult->GetHeight() << endl;
const uint8_t *pImageBuffer = (uint8_t *) ptrGrabResult->GetBuffer();
cout << "Gray value of first pixel: " << (uint32_t) pImageBuffer[0] << endl << endl;
// Display the grabbed image.
Pylon::DisplayImage(1, ptrGrabResult);
}
else
{
cout << "Error: " << ptrGrabResult->GetErrorCode() << " " << ptrGrabResult->GetErrorDescription();
}
}