GrpcPrint/PrintS/camera/HBDCamera.h

153 lines
3.8 KiB
C++

#pragma once
#include "../config/bean/ExtCfg.h"
#include "../config/bean/CameraCalibrationCfg.h"
#include "turbojpeg.h"
#include <windows.h>
#include <opencv2/opencv.hpp>
#include "../Controller/Base.h"
enum CameraFunc {
SETDEMANDCATPURE=0,
SETEXPOSUREAUTOBYCFG,
SETGAINAUTOBYCFG,
SETEXPOSURETIMEBYCFG,
SETFRAMERATEENABLE,
SETFRAMERATE,
GETSHOWIMAGE,
GETSHOWIMAGES,
TAKEPHOTOS,
};
class PointImageShowInfo {
public:
PointImageShowInfo()
: m_ShowTex(0)
, m_Width(0)
, m_High(0)
, m_PixelRatio(0)
, m_ImageData(nullptr)
, 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; //不传
bool m_IsColor; //不传
cv::Mat m_ImageMat; //不传
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); //TakePhotos包含了
void GetRemoteShowImageMat(cv::Mat& mat) //不用传
{
EnterCriticalSection(&m_OriginalDataCS);
m_ShowImage.copyTo(mat);
LeaveCriticalSection(&m_OriginalDataCS);
}
void GetOriginSize(int& width, int& height, int &datasize) { //TakePhotos包含了
EnterCriticalSection(&m_OriginalDataCS);
width = m_OriginalWidth;
height = m_OriginalHeight;
datasize = m_OriginalDataSize;
LeaveCriticalSection(&m_OriginalDataCS);
}
void TakePhotos(); //拍照
void CallFunc(const ReadData& rd, ::stream::ResponseAny** response = nullptr);
void SendToClients(WRITETYPE type = CAMERAPARAM, const std::string& addKey = "");
void Update(const ReadData& rd, WRITETYPE type = CAMERAPARAM);
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() {}
private:
void GetImageSize(int rowindex, ::stream::ResponseAny** response);
public:
BoolData* m_ShowFlag; //只有界面会修改
IntData* m_LastMouRefImgPosX; //只有界面会修改
IntData* m_LastMouRefImgPosY; //只有界面会修改
PointImageShowInfo* m_PointImage;
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;
};