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.

129 lines
3.2 KiB
C++

#include "TempImage.h"
#include "qdir.h"
#include "HubBase.h"
#include "imgcodecs.hpp"
TempImage::TempImage()
{
}
TempImage::~TempImage()
{
release();
}
void TempImage::init(const QString& strbase, const QString &str)
{
QString strTmp = strbase + "\\template\\" + str + "\\";
QDir dir(strTmp);
QStringList filters;
filters << "*.bmp" << "*.jpg"<<"*.png";
dir.setNameFilters(filters);
dir.setFilter(QDir::Files);
dir.setNameFilters(filters);
QFileInfoList fileList = dir.entryInfoList();
for (int j = 0; j < fileList.size(); j++) {
QFileInfo info = fileList[j];
QString strPath = info.absoluteFilePath();
QString strName = info.baseName();
//cv::Mat src = cv::imread((strPath).toLatin1().data(), 0);
cv::Mat src = cv::imread(std::string((const char*)strPath.toLocal8Bit()), 0);
add(src, strName, strPath);
}
}
void TempImage::add(cv::Mat &img, QString strFileName, QString strFilePath)
{
if (img.empty()) {
return;
}
TempImageInfo*pInfo = new TempImageInfo(img, strFileName, strFilePath);
m_imgTemplateLib.push_back(pInfo);
}
bool TempImage::release()
{
for each (TempImageInfo* pInfo in m_imgTemplateLib) {
delete pInfo;
}
m_imgTemplateLib.clear();
return true;
}
std::vector<cv::Mat> TempImage::getImgVector()
{
std::vector<cv::Mat> imgs;
for (int i = 0; i < m_imgTemplateLib.size(); i++) {
imgs.push_back(m_imgTemplateLib.at(i)->m_img);
}
return imgs;
}
std::vector<cv::Mat> TempImage::getImgVector(int nPos)
{
std::vector<cv::Mat> imgs;
imgs.clear();
if (m_imgTemplateLib.size() <= 0)
return imgs;
if (nPos == 0)
{
for (int i = 0; i < m_imgTemplateLib.size(); i++) {
imgs.push_back(m_imgTemplateLib.at(i)->m_img);
}
}
else if (nPos == 1){
imgs.push_back(m_imgTemplateLib.at(0)->m_img);
}
else if (nPos == 2){
imgs.push_back(m_imgTemplateLib.at(m_imgTemplateLib.size()-1)->m_img);
}
return imgs;
}
std::vector<TempImageInfo*> TempImage::getVectors()
{
return m_imgTemplateLib;
}
void TempImage::remove(const QString& strKey)
{
// for (int i = 0; i < m_imgTemplateLib.size(); i++) {
// if (m_imgTemplateLib.at(i)->m_strFileName == strKey) {
// hubBase::removeFile(m_imgTemplateLib.at(i)->m_strAbsoluteFilePath);
// TempImageInfo * pTemp = m_imgTemplateLib.at(i);
// m_imgTemplateLib.erase(pTemp);
// break;
// }
// }
for (std::vector<TempImageInfo*>::iterator its = m_imgTemplateLib.begin(); its != m_imgTemplateLib.end(); ++its){
if ((*its)->m_strFileName == strKey){
TempImageInfo* pTemp = (*its);
hubBase::removeFile(pTemp->m_strAbsoluteFilePath);
m_imgTemplateLib.erase(its);
delete pTemp;
break;
}
}
}
void TempImage::reload(const QString& strbase, const QString &str)
{
release();
QString strTmp = strbase + "\\template\\" + str + "\\";
QDir dir(strTmp);
QStringList filters;
filters << "*.bmp" << "*.jpg" << "*.png";
dir.setNameFilters(filters);
dir.setFilter(QDir::Files);
dir.setNameFilters(filters);
QFileInfoList fileList = dir.entryInfoList();
for (int j = 0; j < fileList.size(); j++) {
QFileInfo info = fileList[j];
QString strPath = info.absoluteFilePath();
QString strName = info.baseName();
cv::Mat src = cv::imread(std::string((const char*)strPath.toLocal8Bit()), 0);
add(src, strName, strPath);
}
}