Basler相机获取图像数据:CGrabResultData使用实例

//数据类

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();
            }
        }

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码猿杂谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值