You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

307 lines
7.7 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#pragma once
// 包含情报结构体文件
#include "QBStru.h"
// 回调函数定义
#include "CallBackDef.h"
// 声明 图像显示对话框类
class CImgShowDlg;
class AFX_CLASS_EXPORT CExportImgShowBase: public CObject
{
public:
// 构造函数
CExportImgShowBase(void);
// 析构函数
~CExportImgShowBase(void);
public:
/************************************************************************/
/* part 1窗口创建、销毁、图像显示、标注等 */
/************************************************************************/
// 1 功能:创建视频显示窗口
// 输入:
// 1. hParentWnd: 父窗口句柄
//
// 输出创建成功返回TRUE否则返回FALSE
BOOL CreateWnd(const HWND hParentWnd);
// 2 功能:移动(设置)窗口(整个视频显示窗口)至指定位置
// 输入:
// 1. clientRect移动至该区域
//
// 输出:无
void MoveWnd(const CRect &clientRect);
// 3 功能显示SW_SHOW 或隐藏 SW_HIDE 窗口
// 输入:
// 1. nCmdShowSW_SHOW 或 SW_HIDE
//
// 输出:无
void ShowWnd(const int nCmdShow);
// 4 功能:显示一帧图像
// 输入:
// 1. pImgInfo图像信息头
// 2. pImgData图像数据指针
// 3. LBbox经纬度盒子
// 4 isNeedFlip: 是否需要反转
// 5. isNeedClip是否需要裁剪标识
// 6. ShowRegion裁剪区域
// 7. Strecth_Ratio 图像拉伸比例默认为1即填满屏幕
// 8. 图像平移控制
//
// 输出显示成功返回TRUE否则返回FALSE
// 说明信号1
BOOL ShowImage(const BITMAPINFO* pImgInfo,
BYTE* pImgData,
GeoBoundingBox LBbox = GeoBoundingBox(),
BOOL isNeedFlip = FALSE,
BOOL isNeedClip = FALSE,
const CRect* pShowRegion = NULL,
float Strecth_Ratio = 1.0F,
POINT xyShift = POINT());
// 5 功能:显示并处理通用情报数据
// 输入:
// 1.qbData: 情报数据结构体变量指针
//
// 输出: 无
// 说明信号2
// 注意信号1优先级 > 信号2优先级
void DisposeQBData(const QBStru* qbData);
// 6 功能:标绘目标,其中输入为目标点像素坐标
// 输入:
// 1. pt目标点像素坐标
//
// 输出:在窗口标绘目标
// 注意事项:如果输入图像同时,对目标进行标绘,需要在 函数4ShowImage输入之后 输入本函数
void SetTargetPixelCoordinate(const CPoint &pt);
// 6.1 功能标绘图像中的一块区域其中输入为4个像素坐标点
// 输入:
// 1. pt4个角点像素坐标
//
// 输出:在窗口标绘目标
// 注意事项:如果输入图像同时,对目标进行标绘,需要在 函数4ShowImage输入之后 输入本函数
void SetQuadrangleCorners(const POINT *pts);
// 6.2 功能:标绘目标,其中输入为经纬度坐标
// 输入:
// 1. pt经纬度坐标
//
// 输出:在窗口标绘目标
// 注意事项:如果输入图像同时,对目标进行标绘,需要在 函数4ShowImage输入之后 输入本函数
void SetTgtLocLeadLonLat(double lon, double lat);
// 7 功能:删除视频显示窗口,同时释放所有占用资源
// 输入:无
//
// 输出:无
void DestroyWnd();
// 8 功能:清理内存及记忆
// 输入:无
//
// 输出:无
void ClearMemory();
/************************************************************************/
/* part 2设置回调函数像素点坐标、像素点信息、文件保存路径 */
/************************************************************************/
// 1 功能:设置回调函数,对外输出目标点像素坐标(目标点通过左键双击图像获得)
// 输入:
// 1. proc: 回调函数指针
//
// 输出设置成功返回TRUE否则返回FALSE
BOOL SetCallBackFun(SendCoordinateProc proc);
// 2 功能设置回调函数像素信息传递到外部CSU中
// 输入:
// 1.proc: 函数指针
//
// 输出: 设置成功返回TRUE否则返回FALSE
BOOL SetCallBackFun(SendPixInfoProc proc);
// 3 功能设置回调函数传递保存文件路径到外部CSU中
// 输入:
// 1.proc: 函数指针
//
// 输出: 设置成功返回TRUE否则返回FALSE
BOOL SetCallBackFun(SendFilePath proc);
// 5 功能设置回调函数目标定位导引经纬度到外部CSU中
// 输入:
// 1.proc: 函数指针
//
// 输出: 设置成功返回TRUE否则返回FALSE
BOOL SetCallBackFun(SendTgrLocLeadLonLatProc proc);
// 6 功能设置回调函数火炮校射信息输出到外部CSU中
// 输入:
// 1.proc: 函数指针
//
// 输出: 设置成功返回TRUE否则返回FALSE
BOOL SetCallBackFun(SendArtilleryReviseInfoProc proc);
/************************************************************************/
/* part 3图像处理显示控制、处理控制、保存控制 */
/************************************************************************/
// 4 功能:通过鼠标滚轮,实现图像放大缩小
BOOL OnMouseWheelZoomInOutImg(UINT nFlags, short zDelta, CPoint pt);
// 5 功能:取消目标标绘
void CancelTargetPlot();
// 6 功能:图像去雾
// 输入:
// 1. bAdjust 是否调节
// 2. A_MAX 控制去雾效果, A_MAX < 0 时,自适应计算(特别耗时)
// 有效范围【0,255】 异常值自适应;
// 3. degree 控制去雾效果, 有效范围【0,1】 异常值自适应
// 输出:无
void AdjustImgDehaze(BOOL bAdjust = FALSE, int A_MAX = -1, double degree = 0.78);
// 7 功能:图像亮度调节
// 输入:
// 1. bAdjust 是否调节
// 2. degree 调节力度[0 20]
// 输出:无
void AdjustImgIntensity(BOOL bAdjust = FALSE, int degree = 10);
// 8 功能:图像对比度调节
// 输入:
// 1. bAdjust 是否调节
// 2. degree 调节力度[0 20]
// 输出:无
void AdjustImgContrast(BOOL bAdjust = FALSE, int degree = 10);
// 9 功能:图像清晰度调节
// 输入:
// 1. bAdjust 是否调节
// 2. degree 调节力度[0 20]
// 输出:无
void AdjustImgDefinition(BOOL bAdjust = FALSE, int degree = 10);
// 10 功能:返回图像调节上一步图像状态,显示上一次处理图像
void ReturnToPreImgState();
// 11 功能:返回原始图像状态,显示原始图像
void ReturnToSrcImgState();
// 12 功能保存当前图像几何校正并保存为TIFF格式
void SaveImgToTiff();
// 13 功能:保存当前帧至本地文件
// 输入:
// 1. sSaveFolder 图像存储文件夹,为空或找不到时,按默认存储路径存储
// 说明:图像命名规则见设计文档
void SaveCurrentFrame(CString sSaveFolder = "");
// 14 功能是否需要记忆前面多帧18帧图像信息
// 输入:
// 1. bMem TRUE记忆 FALSE不记忆
// 输出:无
void MemPreMultiFrame(BOOL bMem = TRUE);
// 18 功能:设置图像编辑类型
// 输入:
// 1. type : 1定位标记
// 2: 文字标记
// 3: 火炮校射标记
// 其他值,无效
void SetImgEditType(int type);
// 19 功能:获取图像编辑模式
// 输入:无
// 返回:
// true: 图像增强模式
// false:图像标记模式
bool GetImgEditMode();
// 21 功能:几何校正图像并显示图像
void GeoCorrectAndShowImg();
// 22 功能:获取当前显示图像
// 输入:
// 输出:
// 1imgWidth 图像宽
// 2imgHeight 图像高
// 3bitCount 图像位数
// 4pImgData 图像数据指针
// 返回值:
// 成功返回true,失败返回false
bool GetCurrentImg(int &imgWidth, int &imgHeight, int& bitCount, uchar* &pImgData);
// 23 功能:获取图像边界地理坐标
// 输入:
// 输出:
// 1leftLon 西经
// 2topLat 北纬
// 3rigtLon 东经
// 4bottomLat 南纬
// 返回值:
// 成功返回true,失败返回false
bool GetImgBoundingBox(double &leftLon, double &topLat, double &rigtLon, double &bottomLat);
// 24 功能:获取当前显示图像中心经纬度
// 输入:
// 输出:
// 1lon 经度
// 2lat 纬度
// 返回值:
// 成功返回true,失败返回false
bool GetCurrentImgCerterLonLat(double &lon, double &lat);
// 25 功能:标注图像(矩形、区域边缘)
// 输入:
// 1. 区域边缘点 集合
void MarkRegionOnImg(std::vector<std::vector<cv::Point>> &valisContours);
// 26 功能:屏蔽右键菜单
// 输入:
// 1. bClose 默认true关闭
void CloseRightBtnDownMenu(bool bClose = true);
// 27 功能:设置空屏文字
// 输入:
// 1. str 主题文字
void SetThemeText(CString str);
// 28 功能:图像位置导引(同内部目标定位导引)
void LeadImgLoc();
private:
CImgShowDlg* m_ShowDlg; // MFC 对话框
};