115 lines
2.7 KiB
C++
115 lines
2.7 KiB
C++
#include <qthread.h>
|
|
#include <opencv.hpp>
|
|
#include <qqueue.h>
|
|
#include <sqliteManager/sqlManager.h>
|
|
#include <qdatetime.h>
|
|
#include <backStruct.h>
|
|
class backEndManager;
|
|
enum imgSaveThreadType
|
|
{
|
|
oriImgSaveThread,
|
|
resImgSaveThread
|
|
};
|
|
class imgSaveThread :public QThread
|
|
{
|
|
public:
|
|
struct imgSaveStruct {
|
|
std::string cameraKeyName;
|
|
std::string SNcode;
|
|
std::string customName;
|
|
std::string format;//留空则按原图bmp,结果图jpg
|
|
int showIndex = -1;
|
|
unsigned long long timeCode;
|
|
std::vector<cv::Mat>imgs;
|
|
|
|
};
|
|
~imgSaveThread()
|
|
{
|
|
runFlag = false;
|
|
while (this->isRunning() == true);
|
|
qDebug() << "imgSaveThread Ended";
|
|
}
|
|
imgSaveThread(imgSaveThreadType typeIn,QString pathIn)
|
|
{
|
|
type = typeIn;
|
|
switch (type)
|
|
{
|
|
case oriImgSaveThread:
|
|
path = (pathIn).toStdString() + "//yuantu//";
|
|
break;
|
|
case resImgSaveThread:
|
|
path = (pathIn).toStdString() + "//result//";
|
|
break;
|
|
}
|
|
}
|
|
void run()
|
|
{
|
|
while (runFlag)
|
|
{
|
|
while (imgQueue.size()>0)
|
|
saveImg(imgQueue.dequeue());
|
|
QThread::msleep(100);
|
|
}
|
|
}
|
|
void saveImg(imgSaveStruct& data)
|
|
{
|
|
try
|
|
{
|
|
//根据时间获取大概路径
|
|
sqlTableDatas sqlRes = sql->selectSingleData("saveHour", data.SNcode);//查找之前的数据
|
|
std::string fileSavePath = path;
|
|
if (sqlRes.rowDatas.size() > 0 && sqlRes.rowDatas[0][0].value != "")//数据存在
|
|
{
|
|
fileSavePath += sqlRes.tableName + "//" + sqlRes.rowDatas[0][0].value + "H//";
|
|
}
|
|
else//数据不存在 新建数据
|
|
{
|
|
QDateTime currentDateTime = QDateTime::currentDateTime();
|
|
std::string ymd = currentDateTime.toString("yyyy-MM-dd").toStdString();
|
|
int h = currentDateTime.time().hour();
|
|
fileSavePath += ymd + "//" + std::to_string(h) + "H//";
|
|
sql->addData(data.SNcode, { { "saveHour",std::to_string(h) } });
|
|
}
|
|
|
|
//有SN码就储存在SN码路径,无则储存在相机路径
|
|
if ((data.SNcode).length() != 0)
|
|
fileSavePath += data.SNcode + "//";
|
|
else
|
|
fileSavePath += data.cameraKeyName + "//";
|
|
|
|
createDirectoryIfNotExists(fileSavePath);//文件夹处理
|
|
std::string fileName;
|
|
{
|
|
for (int i = 0; i < data.imgs.size(); i++)
|
|
{
|
|
fileName = data.cameraKeyName + "_" + getCurrentDateTime() + "_Count" + std::to_string(i) + ".jpg";
|
|
cv::imwrite(fileSavePath + fileName, data.imgs[i]);
|
|
qInfo() << QString::fromStdString(data.cameraKeyName + " ori:" + fileSavePath + fileName);
|
|
}
|
|
}
|
|
}
|
|
catch (...)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
private:
|
|
QQueue<imgSaveStruct> imgQueue;
|
|
|
|
std::string path = "";
|
|
std::string basicFormat = "";
|
|
imgSaveThreadType type;
|
|
sqlManager* sql;
|
|
bool runFlag = true;
|
|
};
|
|
class imgSaveThreadManager
|
|
{
|
|
public:
|
|
imgSaveThreadManager(backEndManager* backEndManagerIn);
|
|
private:
|
|
backEndManager* _backEndManager;
|
|
imgSaveThread* oriSaveThread;
|
|
imgSaveThread* resSaveThread;
|
|
};
|
|
#pragma once |