|
|
#include "StdAfx.h"
|
|
|
#include "ExportImgShowBase.h"
|
|
|
#include "ImgShowDlg.h"
|
|
|
#include "QB_ImgProcessFun.h"
|
|
|
#include "GlobalFunc.h"
|
|
|
|
|
|
// 构造函数
|
|
|
CExportImgShowBase::CExportImgShowBase(void)
|
|
|
{
|
|
|
m_ShowDlg = NULL;
|
|
|
}
|
|
|
|
|
|
// 析构函数
|
|
|
CExportImgShowBase::~CExportImgShowBase(void)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
ClearMemory();
|
|
|
|
|
|
// 销毁窗口
|
|
|
DestroyWnd();
|
|
|
|
|
|
m_ShowDlg = NULL;
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.what();
|
|
|
std::abort();
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
std::abort();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
// 功能:创建视频显示窗口
|
|
|
BOOL CExportImgShowBase::CreateWnd(const HWND hParentWnd)
|
|
|
{
|
|
|
BOOL ret = FALSE;
|
|
|
|
|
|
try
|
|
|
{
|
|
|
// 输入父窗口有效性验证
|
|
|
if (hParentWnd == NULL)
|
|
|
{
|
|
|
return FALSE;
|
|
|
}
|
|
|
|
|
|
// 基于窗口句柄,获取窗口指针
|
|
|
CWnd* pParWnd = CWnd::FromHandle(hParentWnd);
|
|
|
|
|
|
// 当m_ShowDlg为空时,创建dialog
|
|
|
if (m_ShowDlg == NULL)
|
|
|
{
|
|
|
//return TRUE;
|
|
|
|
|
|
// 新建视频显示窗口对象
|
|
|
m_ShowDlg = new CImgShowDlg();
|
|
|
|
|
|
if (pParWnd != NULL)
|
|
|
{
|
|
|
// 创建窗口
|
|
|
ret = m_ShowDlg->Create(IDD_IMG_SHOW_DIALOG, pParWnd);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
// 释放对象
|
|
|
SAFE_DELETE(m_ShowDlg);
|
|
|
m_ShowDlg = NULL;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return FALSE;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return FALSE;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:移动(设置)窗口(整个视频显示窗口)至指定位置
|
|
|
void CExportImgShowBase::MoveWnd(const CRect &clientRect)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd() != NULL)
|
|
|
{
|
|
|
// 移动窗口至指定位置
|
|
|
m_ShowDlg->MoveWindow(clientRect);
|
|
|
|
|
|
// 设置指北针中心坐标
|
|
|
// CRect rect;
|
|
|
// m_ShowDlg->GetClientRect(&rect);
|
|
|
|
|
|
// POINT center;
|
|
|
// center.x = 60L;
|
|
|
// center.y = 60L;
|
|
|
//
|
|
|
// m_ShowDlg->SetNorthDirectionCenter(center);
|
|
|
}
|
|
|
}
|
|
|
catch (...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:显示或隐藏窗口,由nCmdShow决定
|
|
|
|
|
|
// #define SW_HIDE 0
|
|
|
// #define SW_SHOWNORMAL 1
|
|
|
// #define SW_NORMAL 1
|
|
|
// #define SW_SHOWMINIMIZED 2
|
|
|
// #define SW_SHOWMAXIMIZED 3
|
|
|
// #define SW_MAXIMIZE 3
|
|
|
// #define SW_SHOWNOACTIVATE 4
|
|
|
// #define SW_SHOW 5
|
|
|
// #define SW_MINIMIZE 6
|
|
|
// #define SW_SHOWMINNOACTIVE 7
|
|
|
// #define SW_SHOWNA 8
|
|
|
// #define SW_RESTORE 9
|
|
|
// #define SW_SHOWDEFAULT 10
|
|
|
// #define SW_FORCEMINIMIZE 11
|
|
|
// #define SW_MAX 11
|
|
|
|
|
|
// 功能:显示SW_SHOW 或隐藏 SW_HIDE 窗口 已验证
|
|
|
void CExportImgShowBase::ShowWnd(const int nCmdShow)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd() != NULL)
|
|
|
{
|
|
|
m_ShowDlg->ShowWindow(nCmdShow);
|
|
|
}
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
// 功能:显示一帧图像
|
|
|
BOOL CExportImgShowBase::ShowImage(const BITMAPINFO* pImgInfo,
|
|
|
BYTE* pImgData,
|
|
|
GeoBoundingBox LBbox,
|
|
|
BOOL isNeedFlip,
|
|
|
BOOL isNeedClip,
|
|
|
const CRect* pShowRegion,
|
|
|
float Strecth_Ratio,
|
|
|
POINT xyShift)
|
|
|
{
|
|
|
BOOL ret = FALSE;
|
|
|
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg == NULL && m_ShowDlg->GetSafeHwnd() == NULL)
|
|
|
{
|
|
|
return FALSE;
|
|
|
}
|
|
|
|
|
|
// 数据有效性验证
|
|
|
if ( (pImgInfo == NULL) || (pImgData == NULL))
|
|
|
{
|
|
|
return FALSE;
|
|
|
}
|
|
|
|
|
|
// 设置一路输入正在输入标识
|
|
|
m_ShowDlg->SetFirstSignal(TRUE);
|
|
|
|
|
|
// biBitCount 验证
|
|
|
if(pImgInfo->bmiHeader.biBitCount != 24 && pImgInfo->bmiHeader.biBitCount != 8)
|
|
|
{
|
|
|
m_ShowDlg->SetFirstSignal(FALSE);
|
|
|
return FALSE;
|
|
|
}
|
|
|
|
|
|
// 更新数据至全局变量:LatestQBData
|
|
|
if (pImgInfo->bmiHeader.biWidth > 0 &&
|
|
|
pImgInfo->bmiHeader.biHeight > 0 &&
|
|
|
pImgData != NULL)
|
|
|
{
|
|
|
// 设置一路输入正在输入标识
|
|
|
m_ShowDlg->SetFirstSignal(TRUE);
|
|
|
|
|
|
// 构建临时对象
|
|
|
QBStru local;
|
|
|
local.image.srcImg.ImgWidth = pImgInfo->bmiHeader.biWidth;
|
|
|
local.image.srcImg.ImgHeight = pImgInfo->bmiHeader.biHeight;
|
|
|
local.image.srcImg.bitcount = pImgInfo->bmiHeader.biBitCount;
|
|
|
|
|
|
// 步长:每行像素所占字节数
|
|
|
int lineByte = (pImgInfo->bmiHeader.biWidth * pImgInfo->bmiHeader.biBitCount / 8);
|
|
|
|
|
|
// 位图数据缓冲区的大小,即图像大小
|
|
|
int imgBufSize = pImgInfo->bmiHeader.biHeight * lineByte;
|
|
|
|
|
|
if ( imgBufSize > 0)
|
|
|
{
|
|
|
local.image.srcImg.buff = new BYTE[imgBufSize];
|
|
|
|
|
|
if (local.image.srcImg.buff != NULL)
|
|
|
{
|
|
|
// 复制实际字节数
|
|
|
memcpy(local.image.srcImg.buff, pImgData, static_cast<size_t>(imgBufSize)); // 图像数据复制
|
|
|
|
|
|
// 设置图像数据有效
|
|
|
local.image.bValid = true;
|
|
|
|
|
|
// 是否需要反转
|
|
|
if (isNeedFlip == TRUE)
|
|
|
{
|
|
|
FlipImgStru(&local.image.srcImg);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
local.image.srcImg.BoundingBox = LBbox;
|
|
|
|
|
|
// 将 local 复制到 m_LatestQBData
|
|
|
m_ShowDlg->SetLatestQBData(local);
|
|
|
|
|
|
m_ShowDlg->SetBoundingBox(LBbox);
|
|
|
|
|
|
// 释放 local
|
|
|
if (local.image.srcImg.buff != NULL)
|
|
|
{
|
|
|
SAFE_DELETE_ARRAY(local.image.srcImg.buff);
|
|
|
}
|
|
|
|
|
|
|
|
|
// 显示图像
|
|
|
if (m_ShowDlg != NULL)
|
|
|
{
|
|
|
// 接口转换
|
|
|
CRect ShowRegion;
|
|
|
|
|
|
if (pShowRegion != NULL)
|
|
|
{
|
|
|
ShowRegion = *pShowRegion;
|
|
|
}
|
|
|
|
|
|
ret = m_ShowDlg->ShowOneImage(const_cast<BITMAPINFO*>(pImgInfo), pImgData, isNeedClip, ShowRegion, isNeedFlip, Strecth_Ratio, xyShift);
|
|
|
}
|
|
|
|
|
|
// 图像去雾 亮度调节 对比度调节 清晰度调节 复位
|
|
|
m_ShowDlg->SetiLatest(0); // 最近的一次
|
|
|
m_ShowDlg->SetiPreLatest(0); // 最近的一次的前一次
|
|
|
|
|
|
// 关闭1路正在输入标识
|
|
|
m_ShowDlg->SetFirstSignal(FALSE);
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return ret;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return ret;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:解压后的情报数据处理函数
|
|
|
void CExportImgShowBase::DisposeQBData(const QBStru* qbData)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
if (m_ShowDlg->GetFirstSignal()) // 1路信号正在输入,直接返回
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
else // 关闭3路信号 输入2路信号
|
|
|
{
|
|
|
// 设置2路输入正在输入标识
|
|
|
m_ShowDlg->SetSecondSignal(TRUE);
|
|
|
|
|
|
// 输入二路信号
|
|
|
m_ShowDlg->DisposeQBData(qbData);
|
|
|
|
|
|
// 关闭2路输入正在输入标识
|
|
|
m_ShowDlg->SetSecondSignal(FALSE);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:标绘目标,其中输入为目标点像素坐标
|
|
|
void CExportImgShowBase::SetTargetPixelCoordinate(const CPoint &pt)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
m_ShowDlg->SetTargetPixelCoordinate(pt);
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:标绘图像中的一块区域,其中输入为4个像素坐标点
|
|
|
void CExportImgShowBase::SetQuadrangleCorners(const POINT* pts)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
m_ShowDlg->SetQuadrangleCorners(pts);
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:标绘目标,其中输入为经纬度坐标
|
|
|
void CExportImgShowBase::SetTgtLocLeadLonLat(double lon, double lat)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
m_ShowDlg->SetTgtLocLeadLonLat(lon, lat);
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:删除视频显示窗口,同时释放所有占用资源
|
|
|
void CExportImgShowBase::DestroyWnd()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
// 释放MFC对话框资源
|
|
|
if (m_ShowDlg != NULL)
|
|
|
{
|
|
|
m_ShowDlg->DestroyWindow();
|
|
|
}
|
|
|
|
|
|
// 释放对象
|
|
|
SAFE_DELETE(m_ShowDlg);
|
|
|
m_ShowDlg = NULL;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 8 功能:清理内存及记忆
|
|
|
void CExportImgShowBase::ClearMemory()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
// 输入函数指针callBackFun 有效性验证
|
|
|
if (m_ShowDlg != NULL)
|
|
|
{
|
|
|
m_ShowDlg->ClearMemory();
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:设置回调函数,双击像素坐标
|
|
|
BOOL CExportImgShowBase::SetCallBackFun(SendCoordinateProc proc)
|
|
|
{
|
|
|
BOOL ret = FALSE;
|
|
|
try
|
|
|
{
|
|
|
// 输入函数指针callBackFun 有效性验证
|
|
|
if ((m_ShowDlg != NULL) && (proc != NULL))
|
|
|
{
|
|
|
ret = m_ShowDlg->SetCallBackFun(proc);
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return FALSE;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return FALSE;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:设置回调函数,像素信息传递到外部CSU中
|
|
|
BOOL CExportImgShowBase::SetCallBackFun(SendPixInfoProc proc)
|
|
|
{
|
|
|
BOOL ret = FALSE;
|
|
|
try
|
|
|
{
|
|
|
// 输入函数指针callBackFun 有效性验证
|
|
|
if ((m_ShowDlg != NULL) && (proc != NULL))
|
|
|
{
|
|
|
ret = m_ShowDlg->SetCallBackFun(proc);
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return FALSE;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return FALSE;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
// 功能:设置回调函数,传递保存文件路径到外部CSU中
|
|
|
BOOL CExportImgShowBase::SetCallBackFun(SendFilePath proc)
|
|
|
{
|
|
|
BOOL ret = FALSE;
|
|
|
try
|
|
|
{
|
|
|
// 输入函数指针callBackFun 有效性验证
|
|
|
if ((m_ShowDlg != NULL) && (proc != NULL))
|
|
|
{
|
|
|
ret = m_ShowDlg->SetCallBackFun(proc);
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return FALSE;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return FALSE;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
// 5 功能:设置回调函数,目标定位导引经纬度到外部CSU中
|
|
|
// 输入:
|
|
|
// 1.proc: 函数指针
|
|
|
//
|
|
|
// 输出: 设置成功返回TRUE,否则返回FALSE
|
|
|
BOOL CExportImgShowBase::SetCallBackFun(SendTgrLocLeadLonLatProc proc)
|
|
|
{
|
|
|
BOOL ret = FALSE;
|
|
|
try
|
|
|
{
|
|
|
// 输入函数指针callBackFun 有效性验证
|
|
|
if ((m_ShowDlg != NULL) && (proc != NULL))
|
|
|
{
|
|
|
ret = m_ShowDlg->SetCallBackFun(proc);
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return FALSE;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return FALSE;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 6 功能:设置回调函数,火炮校射信息输出到外部CSU中
|
|
|
// 输入:
|
|
|
// 1.proc: 函数指针
|
|
|
//
|
|
|
// 输出: 设置成功返回TRUE,否则返回FALSE
|
|
|
BOOL CExportImgShowBase::SetCallBackFun(SendArtilleryReviseInfoProc proc)
|
|
|
{
|
|
|
BOOL ret = FALSE;
|
|
|
try
|
|
|
{
|
|
|
// 输入函数指针callBackFun 有效性验证
|
|
|
if ((m_ShowDlg != NULL) && (proc != NULL))
|
|
|
{
|
|
|
ret = m_ShowDlg->SetCallBackFun(proc);
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return FALSE;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return FALSE;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:保存当前帧至本地文件
|
|
|
void CExportImgShowBase::SaveCurrentFrame(CString sSaveFolder)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
if (m_ShowDlg->GetFirstSignal() == FALSE || m_ShowDlg->GetSecondSignal() == FALSE)
|
|
|
{
|
|
|
m_ShowDlg->SetSaveCurrentImgFolder(sSaveFolder);
|
|
|
m_ShowDlg->SaveCurrentDecodedFrame();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
// 功能:是否需要记忆前面多帧(18帧)图像信息
|
|
|
void CExportImgShowBase::MemPreMultiFrame(BOOL bMem)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
m_ShowDlg->MemPreMultiFrame(bMem);
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 功能:通过鼠标滚轮,实现图像放大缩小
|
|
|
BOOL CExportImgShowBase::OnMouseWheelZoomInOutImg(UINT nFlags, short zDelta, CPoint pt)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd()/* && nFlags == MK_CONTROL*/)
|
|
|
{
|
|
|
// 调用VideoShowDlg里面的 OnMouseWheel 操作SrcFrame
|
|
|
return m_ShowDlg->OnMouseWheel(nFlags, zDelta, pt);
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return FALSE;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return FALSE;
|
|
|
}
|
|
|
|
|
|
return FALSE;
|
|
|
}
|
|
|
|
|
|
|
|
|
// 功能:取消目标标绘
|
|
|
void CExportImgShowBase::CancelTargetPlot()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
m_ShowDlg->OnConcelTargetPlot();
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:图像去雾
|
|
|
void CExportImgShowBase::AdjustImgDehaze(BOOL bAdjust, int A_MAX, double degree)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
if (m_ShowDlg->GetFirstSignal() == FALSE && m_ShowDlg->GetSecondSignal() == FALSE)
|
|
|
{
|
|
|
m_ShowDlg->AdjustImgDehaze(bAdjust, A_MAX, degree);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:图像亮度调节
|
|
|
void CExportImgShowBase::AdjustImgIntensity(BOOL bAdjust, int degree)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
if (m_ShowDlg->GetFirstSignal() == FALSE && m_ShowDlg->GetSecondSignal() == FALSE)
|
|
|
{
|
|
|
m_ShowDlg->AdjustImgIntensity(bAdjust, degree);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:图像对比度调节
|
|
|
void CExportImgShowBase::AdjustImgContrast(BOOL bAdjust, int degree)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
if (m_ShowDlg->GetFirstSignal() == FALSE && m_ShowDlg->GetSecondSignal() == FALSE)
|
|
|
{
|
|
|
m_ShowDlg->AdjustImgContrast(bAdjust, degree);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:图像清晰度调节
|
|
|
void CExportImgShowBase::AdjustImgDefinition(BOOL bAdjust, int degree)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
if (m_ShowDlg->GetFirstSignal() == FALSE && m_ShowDlg->GetSecondSignal() == FALSE)
|
|
|
{
|
|
|
m_ShowDlg->AdjustImgDefinition(bAdjust, degree);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:返回图像调节上一步图像状态
|
|
|
void CExportImgShowBase::ReturnToPreImgState()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
if (m_ShowDlg->GetFirstSignal() == FALSE && m_ShowDlg->GetSecondSignal() == FALSE)
|
|
|
{
|
|
|
m_ShowDlg->ReturnToPreImgState();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 功能:返回原始图像状态
|
|
|
void CExportImgShowBase::ReturnToSrcImgState()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
if (m_ShowDlg->GetFirstSignal() == FALSE || m_ShowDlg->GetSecondSignal() == FALSE)
|
|
|
{
|
|
|
m_ShowDlg->ReturnToSrcImgState();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
// 功能:保存当前图像为TIFF格式
|
|
|
void CExportImgShowBase::SaveImgToTiff()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
// 无外部信号输入 本地操作
|
|
|
if (m_ShowDlg->GetFirstSignal() == FALSE && m_ShowDlg->GetSecondSignal() == FALSE)
|
|
|
{
|
|
|
m_ShowDlg->SaveToGeoTiff();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.msg;
|
|
|
return;
|
|
|
}
|
|
|
catch(...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
// 18 功能:设置图像编辑类型
|
|
|
void CExportImgShowBase::SetImgEditType(int type)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
m_ShowDlg->SetImgEditType(type);
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.what();
|
|
|
}
|
|
|
catch (...)
|
|
|
{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 19 功能:获取图像编辑模式
|
|
|
bool CExportImgShowBase::GetImgEditMode()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd())
|
|
|
{
|
|
|
return m_ShowDlg->GetImgEditMode();
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.what();
|
|
|
return true;
|
|
|
}
|
|
|
catch (...)
|
|
|
{
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
|
|
|
// 21 功能:几何校正图像并显示图像
|
|
|
// 输入:
|
|
|
// 无
|
|
|
// 返回:
|
|
|
// 无
|
|
|
void CExportImgShowBase::GeoCorrectAndShowImg()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd() != NULL)
|
|
|
{
|
|
|
return m_ShowDlg->GeoCorrectAndShowImg();
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.what();
|
|
|
return;
|
|
|
}
|
|
|
catch (...)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
// 22 功能:获取当前显示图像
|
|
|
// 输入:
|
|
|
// 无
|
|
|
// 返回:
|
|
|
// 无
|
|
|
bool CExportImgShowBase::GetCurrentImg(int &imgWidth, int &imgHeight, int& bitCount, uchar* &pImgData)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd() != NULL)
|
|
|
{
|
|
|
cv::Mat img = m_ShowDlg->GetCurrentImg();
|
|
|
|
|
|
if (img.empty() == true)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
imgWidth = img.cols;
|
|
|
imgHeight = img.rows;
|
|
|
|
|
|
if (img.type() == CV_8UC1)
|
|
|
{
|
|
|
bitCount = 8;
|
|
|
}
|
|
|
else if (img.type() == CV_8UC3)
|
|
|
{
|
|
|
bitCount = 24;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
pImgData = nullptr;
|
|
|
pImgData = new uchar[imgHeight * imgWidth * bitCount];
|
|
|
|
|
|
if (pImgData != nullptr)
|
|
|
{
|
|
|
memcpy(pImgData, img.data, imgHeight * imgWidth * (bitCount / 8));
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.what();
|
|
|
return false;
|
|
|
}
|
|
|
catch (...)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
// 23 功能:获取图像边界地理坐标
|
|
|
// 输入:
|
|
|
// 无
|
|
|
// 输出:
|
|
|
// 1:leftLon 西经
|
|
|
// 2:topLat 北纬
|
|
|
// 3:rigtLon 东经
|
|
|
// 4:bottomLat 南纬
|
|
|
// 返回值:
|
|
|
// 成功返回true,失败返回false
|
|
|
bool CExportImgShowBase::GetImgBoundingBox(double &leftLon, double &topLat, double &rigtLon, double &bottomLat)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd() != NULL)
|
|
|
{
|
|
|
return m_ShowDlg->GetImgBoundingBox(leftLon, topLat, rigtLon, bottomLat);
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.what();
|
|
|
return false;
|
|
|
}
|
|
|
catch (...)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
// 23 功能:获取当前显示图像中心经纬度
|
|
|
// 输入:
|
|
|
// 无
|
|
|
// 输出:
|
|
|
// 1:lon 经度
|
|
|
// 2:lat 纬度
|
|
|
// 返回值:
|
|
|
// 成功返回true,失败返回false
|
|
|
bool CExportImgShowBase::GetCurrentImgCerterLonLat(double &lon, double &lat)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd() != NULL)
|
|
|
{
|
|
|
return m_ShowDlg->GetCurrentImgCenterLonLat(lon, lat);
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.what();
|
|
|
return false;
|
|
|
}
|
|
|
catch (...)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
|
|
|
// 24 功能:标注图像(矩形、区域边缘)
|
|
|
// 输入:
|
|
|
// 1. 区域边缘点 集合
|
|
|
// 输出:
|
|
|
// 无
|
|
|
// 返回值:
|
|
|
// 无
|
|
|
void CExportImgShowBase::MarkRegionOnImg(std::vector<std::vector<cv::Point>> &valisContours)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd() != NULL)
|
|
|
{
|
|
|
m_ShowDlg->MarkRegionOnImg(valisContours);
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.what();
|
|
|
}
|
|
|
catch (...)
|
|
|
{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 25 功能:屏蔽右键菜单
|
|
|
// 输入:
|
|
|
// 1. bClose 默认true关闭
|
|
|
// 输出:
|
|
|
// 无
|
|
|
// 返回值:
|
|
|
// 无
|
|
|
void CExportImgShowBase::CloseRightBtnDownMenu(bool bClose)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd() != NULL)
|
|
|
{
|
|
|
m_ShowDlg->CloseRightBtnDownMenu(bClose);
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.what();
|
|
|
}
|
|
|
catch (...)
|
|
|
{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
// 26 功能:设置空屏文字
|
|
|
// 输入:
|
|
|
// 1. str 主题文字
|
|
|
// 输出:
|
|
|
// 无
|
|
|
// 返回值:
|
|
|
// 无
|
|
|
void CExportImgShowBase::SetThemeText(CString str)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd() != NULL)
|
|
|
{
|
|
|
m_ShowDlg->SetThemeText(str);
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.what();
|
|
|
}
|
|
|
catch (...)
|
|
|
{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 28 功能:图像位置导引(同内部目标定位导引)
|
|
|
void CExportImgShowBase::LeadImgLoc()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (m_ShowDlg != NULL && m_ShowDlg->GetSafeHwnd() != NULL)
|
|
|
{
|
|
|
m_ShowDlg->LeadImgLoc();
|
|
|
}
|
|
|
}
|
|
|
catch(cv::Exception &e)
|
|
|
{
|
|
|
e.what();
|
|
|
}
|
|
|
catch (...)
|
|
|
{
|
|
|
}
|
|
|
} |