2024-05-06 10:49:15 +08:00
|
|
|
|
#pragma once
|
2024-03-26 10:33:00 +08:00
|
|
|
|
#include "../config/bean/ExtCfg.h"
|
|
|
|
|
#include "../config/bean/CameraCalibrationCfg.h"
|
|
|
|
|
#include "turbojpeg.h"
|
|
|
|
|
#include <windows.h>
|
|
|
|
|
#include <opencv2/opencv.hpp>
|
2024-05-17 10:57:17 +08:00
|
|
|
|
#include "../Controller/Base.h"
|
|
|
|
|
|
|
|
|
|
enum CameraFunc {
|
|
|
|
|
SETDEMANDCATPURE=0,
|
|
|
|
|
SETEXPOSUREAUTOBYCFG,
|
|
|
|
|
SETGAINAUTOBYCFG,
|
|
|
|
|
SETEXPOSURETIMEBYCFG,
|
|
|
|
|
SETFRAMERATEENABLE,
|
|
|
|
|
SETFRAMERATE,
|
|
|
|
|
GETSHOWIMAGE,
|
|
|
|
|
GETSHOWIMAGES,
|
|
|
|
|
|
|
|
|
|
TAKEPHOTOS,
|
|
|
|
|
};
|
2024-03-26 10:33:00 +08:00
|
|
|
|
|
|
|
|
|
class PointImageShowInfo {
|
|
|
|
|
public:
|
|
|
|
|
PointImageShowInfo()
|
2024-05-17 10:57:17 +08:00
|
|
|
|
: m_ShowTex(0)
|
|
|
|
|
, m_Width(0)
|
|
|
|
|
, m_High(0)
|
|
|
|
|
, m_PixelRatio(0)
|
|
|
|
|
, m_ImageData(nullptr)
|
|
|
|
|
, m_IsColor(false)
|
|
|
|
|
{
|
|
|
|
|
|
2024-03-26 10:33:00 +08:00
|
|
|
|
}
|
|
|
|
|
~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;
|
2024-05-17 10:57:17 +08:00
|
|
|
|
float m_PixelRatio; //不传
|
|
|
|
|
bool m_IsColor; //不传
|
|
|
|
|
|
|
|
|
|
cv::Mat m_ImageMat; //不传
|
2024-03-26 10:33:00 +08:00
|
|
|
|
private:
|
|
|
|
|
unsigned char* m_ImageData;
|
|
|
|
|
uint32_t m_ShowTex;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class HBDCamera
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
HBDCamera();
|
|
|
|
|
virtual ~HBDCamera();
|
|
|
|
|
virtual bool Init() { return false; }
|
|
|
|
|
|
|
|
|
|
virtual void StartUp();
|
|
|
|
|
|
|
|
|
|
|
2024-05-17 10:57:17 +08:00
|
|
|
|
virtual bool IsConnect() { return false; } //当参数传
|
2024-03-26 10:33:00 +08:00
|
|
|
|
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);
|
|
|
|
|
|
2024-05-17 10:57:17 +08:00
|
|
|
|
virtual bool GenLogImage(void) { return false; } //不传
|
2024-03-26 10:33:00 +08:00
|
|
|
|
|
2024-05-17 10:57:17 +08:00
|
|
|
|
unsigned char * GetLogImage(void) { return m_LogImage; } //不传
|
|
|
|
|
unsigned int GetLogImageSize(void) { return m_LogImageSize; } //不传
|
|
|
|
|
float GetAspect() { return m_Aspect; } //当参数传
|
2024-03-26 10:33:00 +08:00
|
|
|
|
//unsigned int GetLogImageWidth() { return m_ImgWidth; }
|
|
|
|
|
//unsigned int GetLogImageHeight() { return m_ImgHeight; }
|
2024-05-17 10:57:17 +08:00
|
|
|
|
virtual bool GetRawImage(unsigned char* img); //TakePhotos包含了
|
2024-03-26 10:33:00 +08:00
|
|
|
|
|
2024-05-17 10:57:17 +08:00
|
|
|
|
void GetRemoteShowImageMat(cv::Mat& mat) //不用传
|
2024-03-26 10:33:00 +08:00
|
|
|
|
{
|
|
|
|
|
EnterCriticalSection(&m_OriginalDataCS);
|
|
|
|
|
m_ShowImage.copyTo(mat);
|
|
|
|
|
LeaveCriticalSection(&m_OriginalDataCS);
|
|
|
|
|
}
|
|
|
|
|
|
2024-05-17 10:57:17 +08:00
|
|
|
|
void GetOriginSize(int& width, int& height, int &datasize) { //TakePhotos包含了
|
2024-03-26 10:33:00 +08:00
|
|
|
|
EnterCriticalSection(&m_OriginalDataCS);
|
|
|
|
|
width = m_OriginalWidth;
|
|
|
|
|
height = m_OriginalHeight;
|
|
|
|
|
datasize = m_OriginalDataSize;
|
|
|
|
|
LeaveCriticalSection(&m_OriginalDataCS);
|
|
|
|
|
}
|
|
|
|
|
|
2024-05-17 10:57:17 +08:00
|
|
|
|
void TakePhotos(); //拍照
|
|
|
|
|
void CallFunc(const ReadData& rd, ::stream::ResponseAny** response);
|
|
|
|
|
void SendToClients(WRITETYPE type = CAMERAPARAM, const std::string& addKey = "");
|
|
|
|
|
void Update(const ReadData& rd, WRITETYPE type = CAMERAPARAM);
|
2024-03-26 10:33:00 +08:00
|
|
|
|
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() {}
|
2024-05-17 10:57:17 +08:00
|
|
|
|
private:
|
|
|
|
|
void GetImageSize(int rowindex, ::stream::ResponseAny** response);
|
2024-03-26 10:33:00 +08:00
|
|
|
|
public:
|
2024-05-17 10:57:17 +08:00
|
|
|
|
BoolData* m_ShowFlag; //只有界面会修改
|
|
|
|
|
IntData* m_LastMouRefImgPosX; //只有界面会修改
|
|
|
|
|
IntData* m_LastMouRefImgPosY; //只有界面会修改
|
|
|
|
|
|
2024-03-26 10:33:00 +08:00
|
|
|
|
PointImageShowInfo* m_PointImage;
|
2024-05-17 10:57:17 +08:00
|
|
|
|
|
2024-03-26 10:33:00 +08:00
|
|
|
|
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;
|
|
|
|
|
};
|
|
|
|
|
|