GrpcPrint/PrintS/camera/HBDCamera.h
2024-05-06 10:49:15 +08:00

125 lines
2.9 KiB
C++

#pragma once
#include "../config/bean/ExtCfg.h"
#include "../config/bean/CameraCalibrationCfg.h"
#include "turbojpeg.h"
#include <windows.h>
#include <opencv2/opencv.hpp>
class PointImageShowInfo {
public:
PointImageShowInfo()
:m_ShowTex(0) {
m_IsColor = false;
}
~PointImageShowInfo();
void Init(cv::Mat image, unsigned char* imageData);
void Init();
void Update();
uint32_t GetTex() {
return m_ShowTex;
}
public:
int m_Width;
int m_High;
float m_PixelRatio;
cv::Mat m_ImageMat;
bool m_IsColor;
private:
unsigned char* m_ImageData;
uint32_t m_ShowTex;
};
class HBDCamera
{
public:
HBDCamera();
virtual ~HBDCamera();
virtual bool Init() { return false; }
virtual void StartUp();
virtual bool IsConnect() { return false; }
void SetDemandCatpure(bool demand) { m_DemandFlag = demand; }
bool GetDemandCatpure() { return m_DemandFlag; }
virtual void SetExposureAutoByCfg() {}
virtual void SetGainAutoByCfg() {}
virtual void SetExposureTimeByCfg() {}
virtual void SetFrameRateEnable() {}
virtual void SetFrameRate() {}
virtual unsigned int GetShowImage() = 0;
virtual unsigned int GetShowImage(unsigned char * data, unsigned long size, int *width, int *height);
virtual bool GenLogImage(void) { return false; }
unsigned char * GetLogImage(void) { return m_LogImage; }
unsigned int GetLogImageSize(void) { return m_LogImageSize; }
float GetAspect() { return m_Aspect; }
//unsigned int GetLogImageWidth() { return m_ImgWidth; }
//unsigned int GetLogImageHeight() { return m_ImgHeight; }
virtual bool GetRawImage(unsigned char* img);
void GetRemoteShowImageMat(cv::Mat& mat)
{
EnterCriticalSection(&m_OriginalDataCS);
m_ShowImage.copyTo(mat);
LeaveCriticalSection(&m_OriginalDataCS);
}
void GetOriginSize(int& width, int& height, int &datasize) {
EnterCriticalSection(&m_OriginalDataCS);
width = m_OriginalWidth;
height = m_OriginalHeight;
datasize = m_OriginalDataSize;
LeaveCriticalSection(&m_OriginalDataCS);
}
protected:
virtual bool ConnectCamera() { return false; }
virtual void GenTex(uint32_t *tex, unsigned int w, unsigned int h, void * data) {}
virtual void StopCamera();
static DWORD WINAPI CatpureProc(HBDCamera* _this);
virtual void CatpureRun() = 0;
virtual void CreateTestImage() {}
public:
bool m_ShowFlag;
PointImageShowInfo* m_PointImage;
int m_LastMouRefImgPosX;
int m_LastMouRefImgPosY;
protected:
bool m_IsColor;
bool m_DemandFlag;
unsigned char* m_OriginalData;
uint32_t m_OriginalDataSize;
uint32_t m_OriginalWidth;
uint32_t m_OriginalHeight;
CRITICAL_SECTION m_OriginalDataCS;
bool m_ImageChanged;
unsigned char* m_LogImage;
unsigned long m_LogImageSize;
unsigned int m_LogImgWidth;
unsigned int m_LogImgHeight;
float m_Aspect;
uint32_t m_LogGLTex;
uint32_t m_GLTex;
unsigned int m_ImgWidth;
unsigned int m_ImgHeight;
tjhandle m_tjinstance;
ExtCfg* m_ExtCfg;
CameraCalibrationCfg* m_CameraCalibrationCfg;
bool m_RunFlag;
HANDLE m_CatpureThread;
cv::Mat m_ShowImage;
};