增加利用CMAKE 构建TWAIN工程文件,编译debug、release版本已通过

This commit is contained in:
lovelyyoung 2020-11-13 11:12:24 +08:00
parent 287843624e
commit 89338002ad
6 changed files with 109 additions and 207 deletions

108
huagao/CMakeLists.txt Normal file
View File

@ -0,0 +1,108 @@
# CMake
cmake_minimum_required (VERSION 2.8)
project(huagotwainds)
execute_process(
COMMAND git log -1 --format=%H
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE GIT_VERSION
)
execute_process(
COMMAND git remote -v
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE GIT_REMOTE_PATH
)
#string (REGEX REPLACE ".*\t| .*" "" GIT_PATH ${GIT_REMOTE_PATH})
string (REGEX REPLACE "[\n\t\r]" "" GIT_VERSION ${GIT_VERSION})
file(GLOB DEV_SRC ${PROJECT_SOURCE_DIR}/Device/*.h ${PROJECT_SOURCE_DIR}/Device/*.cpp)
file(GLOB IMGPROC_SRC ${PROJECT_SOURCE_DIR}/ImageProcess/*.h ${PROJECT_SOURCE_DIR}/ImageProcess/*.cpp)
file(GLOB SRC ${PROJECT_SOURCE_DIR}/*.h ${PROJECT_SOURCE_DIR}/*.cpp)
aux_source_directory(${PROJECT_SOURCE_DIR} DIR_SRCS)
aux_source_directory(${PROJECT_SOURCE_DIR}/Device DIR_DEVICE)
aux_source_directory(${PROJECT_SOURCE_DIR}/ImageProcess DIR_IMGPROC)
set(DIR_RC huagaotwds.rc)
source_group("RC Files" FILES ${DIR_RC})
include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/..
${PROJECT_SOURCE_DIR}/../twpp
${PROJECT_SOURCE_DIR}/../3rdparty/nick
${PROJECT_SOURCE_DIR}/../3rdparty/libtiff/include
${PROJECT_SOURCE_DIR}/../3rdparty/gpdf/
${PROJECT_SOURCE_DIR}/../3rdparty/opencv/include
)
message($ENV{windir})
link_directories(${PROJECT_SOURCE_DIR}/../3rdparty/opencv/x86/staticlib/
${PROJECT_SOURCE_DIR}/../3rdparty/libtiff/
${PROJECT_SOURCE_DIR}/../3rdparty/gpdf/x86/staticlib/
${PROJECT_SOURCE_DIR}/../3rdparty/gpdf/3rdparty/tesseract/staticlib/x86/)
MESSAGE(STATUS "operation system is ${CMAKE_SYSTEM}")
MACRO(RW_LINK_3RD_PART_LIBRARY FULL_LIBRARY_NAME)
link_libraries(optimized ${FULL_LIBRARY_NAME})
link_libraries(debug ${FULL_LIBRARY_NAME}d)
ENDMACRO()
IF (CMAKE_SYSTEM_NAME MATCHES "Linux")
MESSAGE(STATUS "current platform: Linux ")
ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows")
link_libraries(hg_gpdf)
link_libraries(cvblob)
link_libraries(libjpeg)
RW_LINK_3RD_PART_LIBRARY(opencv_core343)
RW_LINK_3RD_PART_LIBRARY(opencv_highgui343)
RW_LINK_3RD_PART_LIBRARY(opencv_imgcodecs343)
RW_LINK_3RD_PART_LIBRARY(opencv_imgproc343)
RW_LINK_3RD_PART_LIBRARY(IlmImf)
RW_LINK_3RD_PART_LIBRARY(libjasper)
RW_LINK_3RD_PART_LIBRARY(libjpeg-turbo)
RW_LINK_3RD_PART_LIBRARY(libpng)
RW_LINK_3RD_PART_LIBRARY(libtiff)
RW_LINK_3RD_PART_LIBRARY(libwebp)
RW_LINK_3RD_PART_LIBRARY(zlib)
RW_LINK_3RD_PART_LIBRARY(ittnotify)
link_libraries(libwebp)
link_libraries(libleptonica)
link_libraries(libprotobuf)
link_libraries(quirc)
link_libraries(tesseract_api)
link_libraries(tesseract_arch)
link_libraries(tesseract_ccmain)
link_libraries(tesseract_ccstruct)
link_libraries(tesseract_ccutil)
link_libraries(tesseract_classify)
link_libraries(tesseract_cutil)
link_libraries(tesseract_dict)
link_libraries(tesseract_lstm)
link_libraries(tesseract_opencl)
link_libraries(tesseract_textord)
link_libraries(tesseract_viewer)
link_libraries(tesseract_wordrec)
MESSAGE(STATUS "current platform: Windows")
ELSEIF (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
MESSAGE(STATUS "current platform: FreeBSD")
ELSE ()
MESSAGE(STATUS "other platform: ${CMAKE_SYSTEM_NAME}")
ENDIF (CMAKE_SYSTEM_NAME MATCHES "Linux")
add_definitions(-DTWPP_IS_DS -D_CRT_SECURE_NO_WARNINGS -D_DIRECT_BUILD -D_NOT_USE -D_AFXDLL -D_UNICODE -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_CRT_NON_CONFORMING_SWPRINTFS -D_WIN32)
add_definitions(-DGIT_VERSION=\"${GIT_VERSION}\")
#
add_library(huagaotwain SHARED ${DIR_SRCS} ${PROJECT_SOURCE_DIR}/exports.def ${DEV_SRC} ${IMGPROC_SRC} ${SRC} ${DIR_RC})
#target_link_libraries(huagaotwain PRIVATE Qt5::Widgets ${Qt5_STATIC_LINK_LIBRARIES} gdev gimgproc)
#target_link_directories(huagaotwain PRIVATE ${Qt5_STATIC_LINK_DIR})
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/redistribute)
set(huagaotwain_path "$<$<CONFIG:Debug>:${LIBRARY_OUTPUT_PATH}\\Debug\\huagaotwain.dll>" "$<$<CONFIG:Release>:${LIBRARY_OUTPUT_PATH}\\Release\\huagaotwain.dll>")
string(REPLACE "/" "\\" huagaotwain_path ${huagaotwain_path})
add_custom_command(TARGET huagaotwain POST_BUILD COMMAND copy ${huagaotwain_path} $ENV{windir}\\twain_32\\huagoscan\\huagaotwain.ds)

View File

@ -4,7 +4,6 @@
#include "UsbScanEx.h"
#include "StopWatch.h"
#include "scn_config.h"
#include "JpegBuffer.h"
#include "ImageMatQueue.h"
#include "filetools.h"
#include "GetMemoryUsage.h"
@ -176,7 +175,7 @@ void GScanO200::open(int vid, int pid)
ipid = 0x0100;
#else
ivid = 0x3072;
ipid = 0x0200;
ipid = 0x0100;
#endif // ISG100
#elif defined(G300)

View File

@ -1,85 +0,0 @@
#include "StdAfx.h"
#include "JpegBuffer.h"
#include "jpeglib.h"
using namespace std;
JpegBuffer::JpegBuffer(cv::Mat buffer, int color_type,int side,int mFilter)
{
this->m_buffer = buffer;
this->m_color_type=color_type;
this->m_side=side;
this->m_mFilter=mFilter;
}
JpegBuffer::JpegBuffer(std::vector<cv::Mat> mats, int color_type, int mFilter)
{
matdatas = mats;
this->m_color_type = color_type;
this->m_mFilter = mFilter;
}
JpegBuffer::JpegBuffer()
{
this->m_buffer = cv::Mat();
this->m_color_type = 2;
this->m_side = 0;
this->m_mFilter = 0;
}
JpegBuffer::~JpegBuffer(void)
{
}
unsigned char* JpegBuffer::getBuffer()
{
return m_buffer.data;
}
cv::Mat JpegBuffer::buffer()
{
return m_buffer;
}
int JpegBuffer::getSize()
{
return m_buffer.cols;
}
cv::Mat JpegBuffer::getMat( int pixType)
{
JpegLib jl;
cv::Mat image = jl.decode(m_buffer, pixType);
return image.clone();
}
std::vector<cv::Mat> JpegBuffer::getMats()
{
std::vector<cv::Mat> retmats;
for (int i = 0; i < matdatas.size(); i++)
{
JpegLib jl;
cv::Mat image = jl.decode(matdatas[i], m_color_type);
retmats.push_back(image.clone());
image.release();
}
return retmats;
}
int JpegBuffer::getMFilter()
{
return m_mFilter;
}
int JpegBuffer::getSide()
{
return m_side;
}
bool JpegBuffer::empty()
{
return matdatas.empty();
}

View File

@ -1,27 +0,0 @@
#pragma once
#include <opencv2\opencv.hpp>
class JpegBuffer
{
public:
JpegBuffer(cv::Mat buffer,int color_type=6,int side=0,int mFilter=0);
JpegBuffer(std::vector<cv::Mat> mats, int color_type = 6,int mFilter = 0);
JpegBuffer();
virtual ~JpegBuffer(void);
unsigned char* getBuffer();
cv::Mat buffer();
int getSize();
cv::Mat getMat( int pixType);
std::vector<cv::Mat> getMats();
int getMFilter();
int getSide();
bool empty();
private:
cv::Mat m_buffer;
std::vector<cv::Mat> matdatas;
int m_color_type;
int m_side;
int m_mFilter;
};

View File

@ -1,67 +0,0 @@
#include "stdafx.h"
#include "jpeglib.h"
JpegLib::JpegLib() :
img_buffer(NULL), sizeBuffer(0)
{
handle = std::shared_ptr<void> (tjInitDecompress(),tjDestroy);
}
JpegLib::~JpegLib()
{
clear();
}
void JpegLib::clear()
{
img_buffer.reset();
sizeBuffer = 0;
}
cv::Mat JpegLib::decode(cv::Mat buf, int pixelFormat)
{
if(buf.rows != 1)
return cv::Mat();
decode(buf.data, buf.cols, pixelFormat);
return cv::Mat(getHeight(), getWidth() , pixelFormat == TJPF_BGR ? CV_8UC3 : CV_8UC1, getData());
}
void JpegLib::decode(unsigned char* buff, unsigned long buff_size, int pixelFormat)
{
tjDecompressHeader(handle.get(), buff, buff_size, &width, &height);
int size = width * height *tjPixelSize[pixelFormat];
if (sizeBuffer != size)
{
clear();
img_buffer = std::shared_ptr<unsigned char>(tjAlloc(size), tjFree);
sizeBuffer = size;
}
if (img_buffer)
{
tjDecompress2(handle.get(), buff, buff_size, img_buffer.get(), width, 0, height, pixelFormat, 0);
}
}
int JpegLib::getWidth()
{
return width;
}
int JpegLib::getHeight()
{
return height;
}
int JpegLib::getBufferSize()
{
return sizeBuffer;
}
unsigned char* JpegLib::getData()
{
return img_buffer.get();
}

View File

@ -1,26 +0,0 @@
#pragma once
#include "turbojpeg.h"
#include <memory>
#include <opencv2\opencv.hpp>
class JpegLib
{
public:
JpegLib();
~JpegLib();
void clear();
cv::Mat decode(cv::Mat buf, int pixelFormat);
void decode(unsigned char* buff, unsigned long buff_size, int pixelFormat);
int getWidth();
int getHeight();
int getBufferSize();
unsigned char* getData();
private:
std::shared_ptr<void> handle;
std::shared_ptr<unsigned char> img_buffer;
int sizeBuffer;
int width;
int height;
};