完成框架目录和模块重构;新增核心、单例、工具、加密及框架 SDK;统一任务、相机和 RPC 接口,并增加离线检测、相机标定、备份恢复、版本管理、崩溃守护和心跳监控功能。
124 lines
4.5 KiB
C++
124 lines
4.5 KiB
C++
#pragma once
|
|
|
|
#include <eui_tools/export.h>
|
|
|
|
#include <windows.h>
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
#include <opencv.hpp>
|
|
#include <qmutex.h>
|
|
|
|
EUI_TOOLS_API void Cross(cv::Mat& image, const cv::Point& center, int length,
|
|
int thickness, const cv::Scalar& color = cv::Scalar(255, 255, 255));
|
|
EUI_TOOLS_API void drawArrow(cv::Mat& paint, const cv::Point& start, const int& length,
|
|
const bool& horizontal, const cv::Scalar& color, const int& thickness, const int& arrowSize);
|
|
EUI_TOOLS_API void drawRotatedRect(cv::Mat& image, cv::RotatedRect rotatedRect,
|
|
cv::Scalar color, int thickness, int lineType);
|
|
EUI_TOOLS_API std::wstring utf8ToWstring(const std::string& utf8Str);
|
|
EUI_TOOLS_API void putTextZH(cv::Mat& image, const std::string& text, cv::Point org,
|
|
int fontSize = 20, cv::Scalar color = cv::Scalar(255, 0, 0));
|
|
|
|
class TextRendererBase
|
|
{
|
|
public:
|
|
virtual ~TextRendererBase() = default;
|
|
virtual void putText(cv::Mat& image, const std::string& text, cv::Point org,
|
|
cv::Scalar color = cv::Scalar(255, 0, 0)) = 0;
|
|
};
|
|
|
|
class EUI_TOOLS_API TextRendererZH
|
|
{
|
|
public:
|
|
TextRendererZH(const TextRendererZH&) = delete;
|
|
TextRendererZH& operator=(const TextRendererZH&) = delete;
|
|
// 持有裸 GDI 句柄且含 QMutex,禁止移动(原先的 = default 实际也是 deleted,这里改为显式)
|
|
TextRendererZH(TextRendererZH&&) = delete;
|
|
TextRendererZH& operator=(TextRendererZH&&) = delete;
|
|
|
|
TextRendererZH(int width, int height, int fontSize = 20,
|
|
const std::wstring& fontName = L"Microsoft YaHei");
|
|
~TextRendererZH();
|
|
|
|
void putText(cv::Mat& image, const std::string& text, cv::Point org,
|
|
cv::Scalar color = cv::Scalar(255, 0, 0));
|
|
void resize(int width, int height);
|
|
void setFontSize(int fontSize);
|
|
|
|
private:
|
|
void resize_unsafe(int width, int height);
|
|
static void logMessage(const char* message);
|
|
void createResources();
|
|
void releaseResources();
|
|
static std::wstring utf8ToWstring(const std::string& str);
|
|
|
|
int width_;
|
|
int height_;
|
|
int fontSize_;
|
|
std::wstring fontName_;
|
|
HDC screenDC_ = nullptr;
|
|
HDC memDC_ = nullptr;
|
|
HBITMAP hBitmap_ = nullptr;
|
|
void* pBits_ = nullptr;
|
|
BITMAPINFO bmi_{};
|
|
HFONT hFont_ = nullptr;
|
|
HGDIOBJ oldBitmap_ = nullptr;
|
|
HGDIOBJ oldFont_ = nullptr;
|
|
QMutex mutex_;
|
|
};
|
|
|
|
class EUI_TOOLS_API cvPainter
|
|
{
|
|
public:
|
|
explicit cvPainter(const int& fontSize = 50);
|
|
cvPainter(const cvPainter&) = delete;
|
|
cvPainter& operator=(const cvPainter&) = delete;
|
|
cvPainter(cvPainter&&) = delete;
|
|
cvPainter& operator=(cvPainter&&) = delete;
|
|
~cvPainter() = default;
|
|
|
|
struct pointPaintJob { cv::Point center; cv::Scalar color; };
|
|
struct contourPaintJob {
|
|
std::vector<std::vector<cv::Point>> contour;
|
|
int i;
|
|
cv::Scalar color;
|
|
int thickness;
|
|
int lineType = cv::LINE_8;
|
|
cv::Mat hierarchy;
|
|
int maxLevel = INT_MAX;
|
|
cv::Point offset;
|
|
};
|
|
struct linePaintJob { cv::Point p1; cv::Point p2; cv::Scalar color; int thickness; };
|
|
struct circleAndCrossPaintJob { cv::Point center; int radius; cv::Scalar color; int thickness; int type; };
|
|
struct rectPaintJob { cv::Rect rect; cv::Scalar color; int thickness; };
|
|
struct textPaintJob { std::string text; cv::Point p; cv::Scalar color; int fontSize; };
|
|
|
|
void clearPaintJobs();
|
|
void appendPaintJob(cv::Point center, cv::Scalar color);
|
|
void appendPaintJob(std::vector<std::vector<cv::Point>> contour, int i,
|
|
cv::Scalar color, int thickness, int lineType = cv::LINE_8,
|
|
cv::InputArray hierarchy = cv::noArray(), int maxLevel = INT_MAX,
|
|
cv::Point offset = cv::Point());
|
|
void appendPaintJob(cv::Point p1, cv::Point p2, cv::Scalar color, int thickness);
|
|
void appendPaintJob(cv::Point center, int radius, cv::Scalar color, int thickness, int type);
|
|
void appendPaintJob(cv::Rect rect, cv::Scalar color, int thickness);
|
|
void appendPaintJob(const std::string& text, cv::Point p, cv::Scalar color, int fontSize = -1);
|
|
void executePaintJobs(cv::Mat& image);
|
|
|
|
private:
|
|
static void logMessage(const char* message);
|
|
|
|
int defaultFontSize = 50;
|
|
std::vector<textPaintJob> textPaintJobs;
|
|
std::vector<pointPaintJob> pointPaintJobs;
|
|
std::vector<circleAndCrossPaintJob> circleAndCrossPaintJobs;
|
|
std::vector<linePaintJob> linePaintJobs;
|
|
std::vector<contourPaintJob> contourPaintJobs;
|
|
std::vector<rectPaintJob> rectPaintJobs;
|
|
std::unordered_map<int, std::unique_ptr<TextRendererZH>> textRenderers_;
|
|
mutable QMutex mutex_;
|
|
};
|