#include #include #include #include #include #include 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::vectorimgs; }; ~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 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