This commit is contained in:
yangjiaxuan 2023-01-11 18:57:31 +08:00
commit 19e3b06991
5 changed files with 348 additions and 242 deletions

View File

@ -1,7 +1,7 @@
if [ "$1" != "hg" ] && [ "$1" != "lsc" ] && [ "$1" != "hw" ] && [ "$1" != "hgweb" ] && [ "$1" != "lscweb" ] && [ "$1" != "hwweb" ] && [ "$1" != "hgso" ] && [ "$1" != "lscso" ] && [ "$1" != "hwso" ]; if [ "$1" != "hg" ] && [ "$1" != "lsc" ] && [ "$1" != "hw" ] && [ "$1" != "cts" ] && [ "$1" != "hgweb" ] && [ "$1" != "lscweb" ] && [ "$1" != "hwweb" ] && [ "$1" != "ctsweb" ] && [ "$1" != "hgso" ] && [ "$1" != "lscso" ] && [ "$1" != "hwso" ] && [ "$1" != "ctsso" ];
then then
echo "APP脚本参数错误" echo "APP脚本参数错误"
echo "参数:华高:hg || hgweb || hgso 立思层:lsc || lscweb || lscso 汉王:hw || hwweb || hwso" echo "参数:华高:hg || hgweb || hgso 立思层:lsc || lscweb || lscso 汉王:hw || hwweb || hwso 沧田:cts || ctsweb || ctsso"
exit 1 exit 1
fi fi
@ -37,6 +37,9 @@ if [ "${1}" == "hw" ] || [ "${1}" == "hwweb" ] || [ "${1}" == "hwso" ]; then
elif [ "${1}" == "lsc" ] || [ "${1}" == "lscweb" ] || [ "${1}" == "lscso" ]; then elif [ "${1}" == "lsc" ] || [ "${1}" == "lscweb" ] || [ "${1}" == "lscso" ]; then
prefix="Lsc" prefix="Lsc"
prefix2="lsc" prefix2="lsc"
elif [ "${1}" == "cts" ] || [ "${1}" == "ctsweb" ] || [ "${1}" == "ctsso" ]; then
prefix="Cts"
prefix2="cts"
fi fi
echo ${prefix} echo ${prefix}
@ -104,7 +107,7 @@ rm -f Makefile
rm -rf obj rm -rf obj
rm HGImgProcTmp.cbp rm HGImgProcTmp.cbp
if [ "${1}" == "hgweb" ] || [ "${1}" == "hwweb" ] || [ "${1}" == "lscweb" ]; then if [ "${1}" == "hgweb" ] || [ "${1}" == "hwweb" ] || [ "${1}" == "lscweb" ] || [ "${1}" == "ctsweb" ]; then
cd ../HGWebService cd ../HGWebService
cp HGWebService.cbp HGWebServiceTmp.cbp cp HGWebService.cbp HGWebServiceTmp.cbp
@ -113,6 +116,8 @@ if [ "${1}" == "hgweb" ] || [ "${1}" == "hwweb" ] || [ "${1}" == "lscweb" ]; the
sed -i "s/OEM_HUAGAO/OEM_HANWANG/g" HGWebServiceTmp.cbp sed -i "s/OEM_HUAGAO/OEM_HANWANG/g" HGWebServiceTmp.cbp
elif [ "${1}" == "lscweb" ]; then elif [ "${1}" == "lscweb" ]; then
sed -i "s/OEM_HUAGAO/OEM_LISICHENG/g" HGWebServiceTmp.cbp sed -i "s/OEM_HUAGAO/OEM_LISICHENG/g" HGWebServiceTmp.cbp
elif [ "${1}" == "ctsweb" ]; then
sed -i "s/OEM_HUAGAO/OEM_CANGTIAN/g" HGWebServiceTmp.cbp
fi fi
sed -i "s/-lHGBase/-l${prefix}Base/g" HGWebServiceTmp.cbp sed -i "s/-lHGBase/-l${prefix}Base/g" HGWebServiceTmp.cbp
sed -i "s/-lHGImgFmt/-l${prefix}ImgFmt/g" HGWebServiceTmp.cbp sed -i "s/-lHGImgFmt/-l${prefix}ImgFmt/g" HGWebServiceTmp.cbp
@ -132,6 +137,8 @@ if [ "${1}" == "hgweb" ] || [ "${1}" == "hwweb" ] || [ "${1}" == "lscweb" ]; the
sed -i "s/OEM_HUAGAO/OEM_HANWANG/g" HGWebScanTmp.cbp sed -i "s/OEM_HUAGAO/OEM_HANWANG/g" HGWebScanTmp.cbp
elif [ "${1}" == "lscweb" ]; then elif [ "${1}" == "lscweb" ]; then
sed -i "s/OEM_HUAGAO/OEM_LISICHENG/g" HGWebScanTmp.cbp sed -i "s/OEM_HUAGAO/OEM_LISICHENG/g" HGWebScanTmp.cbp
elif [ "${1}" == "ctsweb" ]; then
sed -i "s/OEM_HUAGAO/OEM_CANGTIAN/g" HGWebScanTmp.cbp
fi fi
sed -i "s/-lHGBase/-l${prefix}Base/g" HGWebScanTmp.cbp sed -i "s/-lHGBase/-l${prefix}Base/g" HGWebScanTmp.cbp
sed -i "s/-lHGImgFmt/-l${prefix}ImgFmt/g" HGWebScanTmp.cbp sed -i "s/-lHGImgFmt/-l${prefix}ImgFmt/g" HGWebScanTmp.cbp
@ -144,7 +151,7 @@ if [ "${1}" == "hgweb" ] || [ "${1}" == "hwweb" ] || [ "${1}" == "lscweb" ]; the
rm -rf obj rm -rf obj
rm HGWebScanTmp.cbp rm HGWebScanTmp.cbp
elif [ "${1}" == "hgso" ] || [ "${1}" == "hwso" ] || [ "${1}" == "lscso" ]; then elif [ "${1}" == "hgso" ] || [ "${1}" == "hwso" ] || [ "${1}" == "lscso" ] || [ "${1}" == "ctsso" ]; then
cd ../HGScannerLib cd ../HGScannerLib
cp HGScannerLib.cbp HGScannerLibTmp.cbp cp HGScannerLib.cbp HGScannerLibTmp.cbp
@ -153,6 +160,8 @@ elif [ "${1}" == "hgso" ] || [ "${1}" == "hwso" ] || [ "${1}" == "lscso" ]; then
sed -i "s/OEM_HUAGAO/OEM_HANWANG/g" HGScannerLibTmp.cbp sed -i "s/OEM_HUAGAO/OEM_HANWANG/g" HGScannerLibTmp.cbp
elif [ "${1}" == "lscso" ]; then elif [ "${1}" == "lscso" ]; then
sed -i "s/OEM_HUAGAO/OEM_LISICHENG/g" HGScannerLibTmp.cbp sed -i "s/OEM_HUAGAO/OEM_LISICHENG/g" HGScannerLibTmp.cbp
elif [ "${1}" == "ctsso" ]; then
sed -i "s/OEM_HUAGAO/OEM_CANGTIAN/g" HGScannerLibTmp.cbp
fi fi
sed -i "s/-lHGBase/-l${prefix}Base/g" HGScannerLibTmp.cbp sed -i "s/-lHGBase/-l${prefix}Base/g" HGScannerLibTmp.cbp
sed -i "s/-lHGImgFmt/-l${prefix}ImgFmt/g" HGScannerLibTmp.cbp sed -i "s/-lHGImgFmt/-l${prefix}ImgFmt/g" HGScannerLibTmp.cbp
@ -175,6 +184,8 @@ else #APP
sed -i "s/OEM_HUAGAO/OEM_HANWANG/g" HGVersionTmp.cbp sed -i "s/OEM_HUAGAO/OEM_HANWANG/g" HGVersionTmp.cbp
elif [ "${1}" == "lsc" ]; then elif [ "${1}" == "lsc" ]; then
sed -i "s/OEM_HUAGAO/OEM_LISICHENG/g" HGVersionTmp.cbp sed -i "s/OEM_HUAGAO/OEM_LISICHENG/g" HGVersionTmp.cbp
elif [ "${1}" == "cts" ]; then
sed -i "s/OEM_HUAGAO/OEM_CANGTIAN/g" HGVersionTmp.cbp
fi fi
sed -i "s/-lHGBase/-l${prefix}Base/g" HGVersionTmp.cbp sed -i "s/-lHGBase/-l${prefix}Base/g" HGVersionTmp.cbp
cbp2make -targets ${system}_${arch}_Release -in HGVersionTmp.cbp -out makefile cbp2make -targets ${system}_${arch}_Release -in HGVersionTmp.cbp -out makefile
@ -191,19 +202,28 @@ else #APP
sed -i "s/hgsane/hwsane/g" HGScannerTmp.pro sed -i "s/hgsane/hwsane/g" HGScannerTmp.pro
sed -i "s/hgdriver/hwdriver/g" HGScannerTmp.pro sed -i "s/hgdriver/hwdriver/g" HGScannerTmp.pro
sed -i "s/HuaGoScan/HanvonScan/g" HGScannerTmp.pro sed -i "s/HuaGoScan/HanvonScan/g" HGScannerTmp.pro
sed -i "s/HGBase/HwBase/g" HGScannerTmp.pro sed -i "s/HGBase/HwBase/g" HGScannerTmp.pro
sed -i "s/HGImgFmt/HwImgFmt/g" HGScannerTmp.pro sed -i "s/HGImgFmt/HwImgFmt/g" HGScannerTmp.pro
sed -i "s/HGImgProc/HwImgProc/g" HGScannerTmp.pro sed -i "s/HGImgProc/HwImgProc/g" HGScannerTmp.pro
sed -i "s/logo.ico/Hanvon_logo1.ico/g" HGScannerTmp.pro sed -i "s/logo.ico/Hanvon_logo1.ico/g" HGScannerTmp.pro
elif [ "${1}" == "lsc" ]; then elif [ "${1}" == "lsc" ]; then
sed -i "s/OEM_HUAGAO/OEM_LISICHENG/g" HGScannerTmp.pro sed -i "s/OEM_HUAGAO/OEM_LISICHENG/g" HGScannerTmp.pro
sed -i "s/hgsane/lscsane/g" HGScannerTmp.pro sed -i "s/hgsane/lscsane/g" HGScannerTmp.pro
sed -i "s/hgdriver/lscdriver/g" HGScannerTmp.pro sed -i "s/hgdriver/lscdriver/g" HGScannerTmp.pro
sed -i "s/HuaGoScan/LanxumScan/g" HGScannerTmp.pro sed -i "s/HuaGoScan/LanxumScan/g" HGScannerTmp.pro
sed -i "s/HGBase/LscBase/g" HGScannerTmp.pro sed -i "s/HGBase/LscBase/g" HGScannerTmp.pro
sed -i "s/HGImgFmt/LscImgFmt/g" HGScannerTmp.pro sed -i "s/HGImgFmt/LscImgFmt/g" HGScannerTmp.pro
sed -i "s/HGImgProc/LscImgProc/g" HGScannerTmp.pro sed -i "s/HGImgProc/LscImgProc/g" HGScannerTmp.pro
sed -i "s/logo.ico/Lanxum_logo.ico/g" HGScannerTmp.pro sed -i "s/logo.ico/Lanxum_logo.ico/g" HGScannerTmp.pro
elif [ "${1}" == "cts" ]; then
sed -i "s/OEM_HUAGAO/OEM_CANGTIAN/g" HGScannerTmp.pro
sed -i "s/hgsane/ctssane/g" HGScannerTmp.pro
sed -i "s/hgdriver/ctsdriver/g" HGScannerTmp.pro
sed -i "s/HuaGoScan/CumtennScan/g" HGScannerTmp.pro
sed -i "s/HGBase/CtsBase/g" HGScannerTmp.pro
sed -i "s/HGImgFmt/CtsImgFmt/g" HGScannerTmp.pro
sed -i "s/HGImgProc/CtsImgProc/g" HGScannerTmp.pro
sed -i "s/logo.ico/Cumtenn_logo.ico/g" HGScannerTmp.pro
fi fi
qmake -qt=qt5 -makefile HGScannerTmp.pro qmake -qt=qt5 -makefile HGScannerTmp.pro
@ -230,6 +250,12 @@ else #APP
sed -i "s/HGBase/LscBase/g" HGUpgradeTmp.pro sed -i "s/HGBase/LscBase/g" HGUpgradeTmp.pro
sed -i "s/HGVersion/LscVersion/g" HGUpgradeTmp.pro sed -i "s/HGVersion/LscVersion/g" HGUpgradeTmp.pro
sed -i "s/logo.ico/Lanxum_logo.ico/g" HGUpgradeTmp.pro sed -i "s/logo.ico/Lanxum_logo.ico/g" HGUpgradeTmp.pro
elif [ "${1}" == "cts" ]; then
sed -i "s/OEM_HUAGAO/OEM_CANGTIAN/g" HGUpgradeTmp.pro
sed -i "s/HGUpgradeApp/CtsUpgradeApp/g" HGUpgradeTmp.pro
sed -i "s/HGBase/CtsBase/g" HGUpgradeTmp.pro
sed -i "s/HGVersion/CtsVersion/g" HGUpgradeTmp.pro
sed -i "s/logo.ico/Cumtenn_logo.ico/g" HGUpgradeTmp.pro
fi fi
qmake -qt=qt5 -makefile HGUpgradeTmp.pro qmake -qt=qt5 -makefile HGUpgradeTmp.pro

View File

@ -504,38 +504,21 @@ int SetDeviceParam(HG_Scanner_Handle pScanner)
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_YSMS, &enumValue); HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_YSMS, &enumValue);
} }
boolValue = m_params.MultiOutput == HG_Unused ? false : true;
if (m_params.MultiOutput == HG_Unused) HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_DLSC, &boolValue);
if (boolValue)
{ {
boolValue = false; if (m_params.MultiOutput == HG_All)
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_DLSC, &boolValue); enumValue = HGLIB_OPTION_ENUMVALUE_DLSCLX_CS_HD_HB;
} else if (m_params.MultiOutput == HG_ColorGray)
else enumValue = HGLIB_OPTION_ENUMVALUE_DLSCLX_CS_HD;
{ else if (m_params.MultiOutput == HG_ColorBw)
boolValue = true; enumValue = HGLIB_OPTION_ENUMVALUE_DLSCLX_CS_HB;
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_DLSC, &boolValue); else if (m_params.MultiOutput == HG_GrayBw)
enumValue = HGLIB_OPTION_ENUMVALUE_DLSCLX_HD_HB;
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_DLSCLX, &enumValue);
} }
if (m_params.MultiOutput == HG_All)
{
enumValue = HGLIB_OPTION_ENUMVALUE_DLSCLX_CS_HD_HB;
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_DLSCLX, &enumValue);
}
else if (m_params.MultiOutput == HG_ColorGray)
{
enumValue = HGLIB_OPTION_ENUMVALUE_DLSCLX_CS_HD;
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_DLSCLX, &enumValue);
}
else if (m_params.MultiOutput == HG_ColorBw)
{
enumValue = HGLIB_OPTION_ENUMVALUE_DLSCLX_CS_HB;
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_DLSCLX, &enumValue);
}
else if (m_params.MultiOutput == HG_GrayBw)
{
enumValue = HGLIB_OPTION_ENUMVALUE_DLSCLX_HD_HB;
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_DLSCLX, &enumValue);
}
if (m_params.ImageProcess.Filter == HG_FILTER_NONE) if (m_params.ImageProcess.Filter == HG_FILTER_NONE)
{ {
@ -585,9 +568,12 @@ int SetDeviceParam(HG_Scanner_Handle pScanner)
boolValue = m_params.ImageProcess.TextureRemove; boolValue = m_params.ImageProcess.TextureRemove;
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_CWW, &boolValue); HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_CWW, &boolValue);
boolValue = m_params.ImageProcess.NosieDetach; boolValue = m_params.ImageProcess.NosieDetachEnable;
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_HBTXZDYH, &boolValue); HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_HBTXZDYH, &boolValue);
intValue = m_params.ImageProcess.NosieDetach;
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_HBTXZDYH, &intValue);
if (m_params.ImageProcess.SharpenType == HG_STNone) if (m_params.ImageProcess.SharpenType == HG_STNone)
{ {
enumValue = HGLIB_OPTION_ENUMVALUE_RHYMH_W; enumValue = HGLIB_OPTION_ENUMVALUE_RHYMH_W;

Binary file not shown.

Binary file not shown.

View File

@ -18,6 +18,7 @@
#include "utlis.h" #include "utlis.h"
#if defined(WIN32)||defined(_WIN32) #if defined(WIN32)||defined(_WIN32)
#include <Windows.h> #include <Windows.h>
@ -30,13 +31,13 @@
static jobject mUserListener = nullptr; static jobject mUserListener = nullptr;
static jobject mUserCallback = nullptr; static jobject mUserCallback = nullptr;
static JavaVM* g_vm = nullptr; static JavaVM *g_vm = nullptr;
HG_Scanner_Handle mScanner = nullptr; HG_Scanner_Handle mScanner = nullptr;
static jobject gClassLoader; static jobject gClassLoader;
static jmethodID gFindClassMethod; static jmethodID gFindClassMethod;
static jclass statusClazz; static jclass statusClazz;
int indeximg = 0; int indeximg = 0;
static int indexPatch = 0; static int indexPatch=0;
#define EN_LOG #define EN_LOG
#ifdef EN_LOG #ifdef EN_LOG
@ -74,152 +75,163 @@ void onReceivedImage(HG_IMG* img, void* obj)
{ {
std::lock_guard<std::mutex> lock(m_mutex); std::lock_guard<std::mutex> lock(m_mutex);
LOG("JAVA--- Enter onReceivedImage width:%d height:%d bitdepth:%d pdata:%p byteperlin:%d\n", img->width, img->height, img->bitdepth, img->pimgdata, img->bytesperline); LOG("JAVA--- Enter onReceivedImage width:%d height:%d bitdepth:%d pdata:%p byteperlin:%d\n", img->width, img->height, img->bitdepth, img->pimgdata, img->bytesperline);
if (mUserCallback) if (!mUserCallback)
{ {
JNIEnv* env; LOG("JAVA--- mUserCallback is null\n");
jint ret = g_vm->GetEnv((void**)&env, JNI_VERSION_1_6); return;
if (ret < 0) }
g_vm->AttachCurrentThread((void**)&env, NULL);
jclass clazz = env->GetObjectClass(mUserCallback); JNIEnv* env;
indeximg++; jint ret = g_vm->GetEnv((void**)&env, JNI_VERSION_1_6);
indexPatch++; if (ret < 0)
cv::Mat matimg(img->height, img->width, img->bitdepth == 24 ? CV_8UC3 : CV_8UC1, img->pimgdata); g_vm->AttachCurrentThread((void**)&env, NULL);
std::string filename, path, str_encodeformat;
std::vector<int> encodeparam;
if (m_mapcaches.count(m_cacheimgformat) > 0)
{
str_encodeformat = m_mapcaches[m_cacheimgformat];
switch (m_cacheimgformat)
{
case HG_CJPG:
encodeparam.push_back(CV_IMWRITE_JPEG_QUALITY);
encodeparam.push_back(70);
break;
case HG_CPNG:
encodeparam.push_back(CV_IMWRITE_PNG_STRATEGY);
encodeparam.push_back(cv::IMWRITE_PNG_STRATEGY_FIXED);
break;
default:
break;
}
}
else
str_encodeformat = m_mapcaches[HG_CJPG];
filename = std::to_string(indeximg) + str_encodeformat; jclass clazz = env->GetObjectClass(mUserCallback);
#if defined(WIN32) || defined(_WIN32) indeximg++;
WCHAR outapth[MAX_PATH]; indexPatch++;
auto length = GetTempPathW(MAX_PATH, outapth); cv::Mat matimg(img->height, img->width, img->bitdepth == 24 ? CV_8UC3 : CV_8UC1, img->pimgdata);
if (length < 1) std::string filename, path, str_encodeformat;
std::vector<int> encodeparam;
if (m_mapcaches.count(m_cacheimgformat) > 0)
{
str_encodeformat = m_mapcaches[m_cacheimgformat];
switch (m_cacheimgformat)
{ {
LOG("JAVA--- error : on Get tmpPath! this would cause no image be saved\n "); case HG_CJPG:
path = "C:\\" + filename;//save in the system disk encodeparam.push_back(CV_IMWRITE_JPEG_QUALITY);
encodeparam.push_back(70);
break;
case HG_CPNG:
encodeparam.push_back(CV_IMWRITE_PNG_STRATEGY);
encodeparam.push_back(cv::IMWRITE_PNG_STRATEGY_FIXED);
break;
default:
break;
} }
else
{
path = WChar2Ansi(outapth);
path += filename;
}
#else
std::string dstdirPath = "/tmp/huagowebserver";
if (access(dstdirPath.c_str(), 0) == -1)//is not exist
{
int flag = mkdir(dstdirPath.c_str(), 0755);
if (flag != 0)
{
std::cout << "make " << dstdirPath << " falied" << std::endl;
dstdirPath = "/tmp";
}
}
path = dstdirPath + "/" + filename;
#endif
//std::vector<int> quality;
//quality.push_back(CV_IMWRITE_JPEG_QUALITY);
//quality.push_back(70);//进行50%的压缩
std::vector<unsigned char> data;
//cv::imencode(".jpg", matimg, data, quality);
data.insert(data.end(), img->pimgdata, img->pimgdata + img->bufferlength);
auto retw = writeimage(path.c_str(), data);
if (retw == -1)
LOG("JAVA--- LOST IMAGE %s \n", path.c_str());
std::string datastr(data.begin(), data.end());
if (!data.empty())
{
std::string base64data = base64_encode_mime(datastr);
jmethodID id = env->GetMethodID(env->GetObjectClass(mUserCallback), "onImageReceived", "(ILjava/lang/String;Ljava/lang/String;)V");
LOG("JAVA--- IMAGE PATH =%s \n", path.c_str());
env->CallVoidMethod(mUserCallback, id, indexPatch, env->NewStringUTF(path.c_str()), env->NewStringUTF(base64data.c_str()));
}
else
LOG("JAVA--- Get uncorrect data");
if (ret < 0)
g_vm->DetachCurrentThread();
} }
else else
LOG("JAVA--- mUserCallback is null\n"); str_encodeformat = m_mapcaches[HG_CJPG];
filename = std::to_string(indeximg) + str_encodeformat;
#if defined(WIN32) || defined(_WIN32)
WCHAR outapth[MAX_PATH];
auto length = GetTempPathW(MAX_PATH, outapth);
if (length < 1)
{
LOG("JAVA--- error : on Get tmpPath! this would cause no image be saved\n ");
path = "C:\\" + filename;//save in the system disk
}
else
{
path = WChar2Ansi(outapth);
path += filename;
}
#else
std::string dstdirPath = "/tmp/huagowebserver";
if (access(dstdirPath.c_str(), 0) == -1)//is not exist
{
int flag = mkdir(dstdirPath.c_str(), 0755);
if (flag != 0)
{
std::cout << "make " << dstdirPath << " falied" << std::endl;
dstdirPath = "/tmp";
}
}
path = dstdirPath + "/" + filename;
#endif
//std::vector<int> quality;
//quality.push_back(CV_IMWRITE_JPEG_QUALITY);
//quality.push_back(70);//进行50%的压缩
std::vector<unsigned char> data;
//cv::imencode(".jpg", matimg, data, quality);
data.insert(data.end(), img->pimgdata, img->pimgdata + img->bufferlength);
auto retw = writeimage(path.c_str(), data);
if (retw == -1)
LOG("JAVA--- LOST IMAGE %s \n", path.c_str());
std::string datastr(data.begin(), data.end());
if (data.empty())
{
LOG("JAVA--- Get Image data is NULL");
return;
}
std::string base64data = base64_encode_mime(datastr);
jmethodID id = env->GetMethodID(env->GetObjectClass(mUserCallback), "onImageReceived", "(ILjava/lang/String;Ljava/lang/String;)V");
LOG("JAVA--- IMAGE PATH =%s \n", path.c_str());
env->CallVoidMethod(mUserCallback, id, indexPatch, env->NewStringUTF(path.c_str()), env->NewStringUTF(base64data.c_str()));
if (ret < 0)
g_vm->DetachCurrentThread();
} }
//aaa //aaa
void onEvent(HG_STATUSCODE statuscode, void* obj) { void onEvent(HG_STATUSCODE statuscode, void *obj)
{
std::lock_guard<std::mutex> lock(m_mutex); std::lock_guard<std::mutex> lock(m_mutex);
LOG("JAVA--- Enter onEvent callback 1 statuscode=%d \n", (int)statuscode);
if (statuscode <= 0 || statuscode > 13) if (statuscode <= 0 || statuscode > 13)
return; return;
if (mUserListener) { if (!mUserListener)
JNIEnv* env; {
jint ret = g_vm->GetEnv((void**)&env, JNI_VERSION_1_6); LOG("JAVA--- onEvent is NULL\n");
if (ret < 0) return;
jint ret2 = g_vm->AttachCurrentThread((void**)&env, NULL); }
JNIEnv *env;
jclass listenerClazz = env->GetObjectClass(mUserListener); jint ret = g_vm->GetEnv((void **) &env, JNI_VERSION_1_6);
jmethodID methodEventId = env->GetMethodID(listenerClazz, "onEvent", "(I)V"); if (ret < 0)
env->CallVoidMethod(mUserListener, methodEventId, (jint)statuscode); {
if (ret < 0) jint ret2= g_vm->AttachCurrentThread((void**)&env, NULL);
g_vm->DetachCurrentThread(); LOG("JAVA--- Enter AttachCurrentThread ret2=%d \n", (int)ret2);
LOG("JAVA--- Enter onEvent callback 10 \n"); }
jclass listenerClazz = env->GetObjectClass(mUserListener);
jmethodID methodEventId = env->GetMethodID(listenerClazz, "onEvent", "(I)V");
env->CallVoidMethod(mUserListener, methodEventId, (jint)statuscode);
if (ret < 0)
{
LOG("JAVA--- Enter onEvent callback DetachCurrentThread\n");
g_vm->DetachCurrentThread();
} }
else
LOG("JAVA--- mUserListener is null\n");
} }
extern "C" JNIEXPORT jint JNICALL extern "C" JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM * vm, void* reserved) JNI_OnLoad(JavaVM *vm, void *reserved) {
{ LOG("JAVA--- enter JNI_OnLoad\n");
JNIEnv* env; JNIEnv *env;
if (g_vm == nullptr) if (g_vm == nullptr) {
g_vm = vm; g_vm = vm;
}
if (g_vm->GetEnv((void**)&env, JNI_VERSION_1_6) != JNI_OK) if (g_vm->GetEnv((void **) &env, JNI_VERSION_1_6) != JNI_OK)
{ {
LOG("JAVA--- JNI_OnLoad error\n"); LOG("JAVA--- JNI_OnLoad error\n");
return JNI_ERR; return JNI_ERR;
} }
LOG("JAVA--- JNI_OnLoad\n"); LOG("JAVA--- exit JNI_OnLoad\n");
return JNI_VERSION_1_6; return JNI_VERSION_1_6;
} }
extern "C" extern "C"
JNIEXPORT jobjectArray JNICALL JNIEXPORT jobjectArray JNICALL
Java_com_huagao_scanner_DeviceManager_getDevices(JNIEnv * env, jobject thiz) Java_com_huagao_scanner_DeviceManager_getDevices(JNIEnv *env, jobject thiz) {
{ LOG("JAVA--- ENTER GETDEVICES\n");
const char* sp = ";";
char* cDevices = HG_GetDevices(const_cast<char*>(sp)); const char* sp=";";
char *cDevices = HG_GetDevices(const_cast<char*>(sp));
if (cDevices == nullptr) if (cDevices == nullptr)
{ {
LOG(" JAVA--- getDevices is fail\n"); LOG(" JAVA--- get no device\n");
return NULL; return NULL;
} }
jstring devices = env->NewStringUTF(cDevices); jstring devices = env->NewStringUTF(cDevices);
jclass strClazz = env->FindClass("java/lang/String"); jclass strClazz = env->FindClass("java/lang/String");
jmethodID splitId = env->GetMethodID(strClazz, "split", "(Ljava/lang/String;)[Ljava/lang/String;");; jmethodID splitId = env->GetMethodID(strClazz, "split", "(Ljava/lang/String;)[Ljava/lang/String;");
LOG("JAVA--- EXIT getDevices\n");
return static_cast<jobjectArray>(env->CallObjectMethod(devices, splitId, env->NewStringUTF(";"))); return static_cast<jobjectArray>(env->CallObjectMethod(devices, splitId, env->NewStringUTF(";")));
} }
extern "C" JNIEXPORT void JNICALL extern "C" JNIEXPORT void JNICALL
Java_com_huagao_scanner_DeviceManager_init(JNIEnv * env, jobject thiz) Java_com_huagao_scanner_DeviceManager_init(JNIEnv *env, jobject thiz)
{ {
HG_Init(); HG_Init();
HG_Set_OnDeviceEvent_callback(onEvent); HG_Set_OnDeviceEvent_callback(onEvent);
@ -229,7 +241,7 @@ Java_com_huagao_scanner_DeviceManager_init(JNIEnv * env, jobject thiz)
extern "C" extern "C"
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_com_huagao_scanner_DeviceManager_setEventListener(JNIEnv * env, jobject thiz, jobject listener) Java_com_huagao_scanner_DeviceManager_setEventListener(JNIEnv *env, jobject thiz, jobject listener)
{ {
if (mUserListener) if (mUserListener)
env->DeleteGlobalRef(mUserListener); env->DeleteGlobalRef(mUserListener);
@ -238,12 +250,11 @@ Java_com_huagao_scanner_DeviceManager_setEventListener(JNIEnv * env, jobject thi
extern "C" extern "C"
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_com_huagao_scanner_DeviceManager_open(JNIEnv * env, jobject thiz, jstring scanner_name) Java_com_huagao_scanner_DeviceManager_open(JNIEnv *env, jobject thiz, jstring scanner_name) {
{ if (mScanner) {
if (mScanner)
return true; return true;
}
char* cName = const_cast<char*>(env->GetStringUTFChars(scanner_name, 0)); char *cName = const_cast<char *>(env->GetStringUTFChars(scanner_name, 0));
LOG("JAVA--- open deivce name:%s \n", cName); LOG("JAVA--- open deivce name:%s \n", cName);
mScanner = HG_OpenScanner(cName); mScanner = HG_OpenScanner(cName);
env->ReleaseStringUTFChars(scanner_name, cName); env->ReleaseStringUTFChars(scanner_name, cName);
@ -252,8 +263,7 @@ Java_com_huagao_scanner_DeviceManager_open(JNIEnv * env, jobject thiz, jstring s
extern "C" extern "C"
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_com_huagao_scanner_DeviceManager_close(JNIEnv * env, jobject thiz) Java_com_huagao_scanner_DeviceManager_close(JNIEnv *env, jobject thiz) {
{
if (mScanner) if (mScanner)
{ {
HG_CloseScanner(mScanner); HG_CloseScanner(mScanner);
@ -263,10 +273,14 @@ Java_com_huagao_scanner_DeviceManager_close(JNIEnv * env, jobject thiz)
extern "C" extern "C"
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_com_huagao_scanner_DeviceManager_setScanParam(JNIEnv * env, jobject thiz, jobject params) Java_com_huagao_scanner_DeviceManager_setScanParam(JNIEnv *env, jobject thiz, jobject params)
{ {
if (mScanner) if (!mScanner)
{ {
LOG("JAVA---SET SCAN PARAM FAIL!!!");
return false;
}
HG_SCANPARAMS cParams; HG_SCANPARAMS cParams;
jclass clazz = env->GetObjectClass(params); jclass clazz = env->GetObjectClass(params);
//设置colorMode //设置colorMode
@ -276,10 +290,10 @@ Java_com_huagao_scanner_DeviceManager_setScanParam(JNIEnv * env, jobject thiz, j
cParams.PixelType = static_cast<HG_COLORMODE>(env->GetIntField(fieldObj, fieldId)); cParams.PixelType = static_cast<HG_COLORMODE>(env->GetIntField(fieldObj, fieldId));
LOG("JAVA--- PixelType =%d \n", cParams.PixelType); LOG("JAVA--- PixelType =%d \n", cParams.PixelType);
id = env->GetFieldID(clazz, "cacheImgFormat", "Lcom/huagao/scanner/enums/CacheImgFormat;"); //id = env->GetFieldID(clazz, "cacheImgFormat", "Lcom/huagao/scanner/enums/CacheImgFormat;");
fieldObj = env->GetObjectField(params, id); //fieldObj = env->GetObjectField(params, id);
fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "value", "I"); //fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "value", "I");
m_cacheimgformat = static_cast<HG_CACHEIMGFORMAT>(env->GetIntField(fieldObj, fieldId)); //m_cacheimgformat = static_cast<HG_CACHEIMGFORMAT>(env->GetIntField(fieldObj, fieldId));
id = env->GetFieldID(clazz, "multiOutput", "Lcom/huagao/scanner/enums/MultiOutput;"); id = env->GetFieldID(clazz, "multiOutput", "Lcom/huagao/scanner/enums/MultiOutput;");
fieldObj = env->GetObjectField(params, id); fieldObj = env->GetObjectField(params, id);
@ -328,17 +342,18 @@ Java_com_huagao_scanner_DeviceManager_setScanParam(JNIEnv * env, jobject thiz, j
id = env->GetFieldID(clazz, "imageProcessParams", "Lcom/huagao/scanner/params/ImageProcessParams;"); id = env->GetFieldID(clazz, "imageProcessParams", "Lcom/huagao/scanner/params/ImageProcessParams;");
fieldObj = env->GetObjectField(params, id); fieldObj = env->GetObjectField(params, id);
fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "discardBlankThre", "I"); //fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "noiseDetachEnable", "I");
cParams.ImageProcess.DiscardBlankThre = env->GetIntField(fieldObj, fieldId); //cParams.ImageProcess.NosieDetachEnable = env->GetIntField(fieldObj, fieldId);
LOG("JAVA--- AnswerSheetFilterRed =%d \n", cParams.ImageProcess.DiscardBlankThre); //LOG("JAVA--- NosieDetachEnable =%d \n", cParams.ImageProcess.NosieDetachEnable);
//fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "discardBlankThre", "I");
//cParams.ImageProcess.DiscardBlankThre = env->GetIntField(fieldObj, fieldId);
//LOG("JAVA--- AnswerSheetFilterRed =%d \n", cParams.ImageProcess.DiscardBlankThre);
fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "autoCrop", "I"); fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "autoCrop", "I");
cParams.ImageProcess.AutoCrop = env->GetIntField(fieldObj, fieldId); cParams.ImageProcess.AutoCrop = env->GetIntField(fieldObj, fieldId);
LOG("JAVA--- AutoCrop =%d \n", cParams.ImageProcess.AutoCrop); LOG("JAVA--- AutoCrop =%d \n", cParams.ImageProcess.AutoCrop);
fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "autoCrop", "I");
cParams.ImageProcess.AutoCrop = env->GetIntField(fieldObj, fieldId);
LOG("JAVA--- AutoCrop =%d \n", cParams.ImageProcess.AutoCrop);
fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "autoCropThreshold", "I"); fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "autoCropThreshold", "I");
cParams.ImageProcess.AutoCrop_threshold = env->GetIntField(fieldObj, fieldId); cParams.ImageProcess.AutoCrop_threshold = env->GetIntField(fieldObj, fieldId);
@ -368,9 +383,9 @@ Java_com_huagao_scanner_DeviceManager_setScanParam(JNIEnv * env, jobject thiz, j
cParams.ImageProcess.ErrorExtention = env->GetIntField(fieldObj, fieldId); cParams.ImageProcess.ErrorExtention = env->GetIntField(fieldObj, fieldId);
LOG("JAVA--- ErrorExtention =%d \n", cParams.ImageProcess.ErrorExtention); LOG("JAVA--- ErrorExtention =%d \n", cParams.ImageProcess.ErrorExtention);
fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "fillBlackRect", "I"); //fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "fillBlackRect", "I");
cParams.ImageProcess.FillBlackRect = env->GetIntField(fieldObj, fieldId); //cParams.ImageProcess.FillBlackRect = env->GetIntField(fieldObj, fieldId);
LOG("JAVA--- FillBlackRect =%d \n", cParams.ImageProcess.FillBlackRect); //LOG("JAVA--- FillBlackRect =%d \n", cParams.ImageProcess.FillBlackRect);
fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "fillHole", "Lcom/huagao/scanner/params/FillHole;"); fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "fillHole", "Lcom/huagao/scanner/params/FillHole;");
jobject fFieldObj = env->GetObjectField(fieldObj, fieldId); jobject fFieldObj = env->GetObjectField(fieldObj, fieldId);
@ -408,6 +423,7 @@ Java_com_huagao_scanner_DeviceManager_setScanParam(JNIEnv * env, jobject thiz, j
cParams.ImageProcess.Noise = env->GetIntField(fieldObj, fieldId); cParams.ImageProcess.Noise = env->GetIntField(fieldObj, fieldId);
LOG("JAVA--- Noise =%d \n", cParams.ImageProcess.Noise); LOG("JAVA--- Noise =%d \n", cParams.ImageProcess.Noise);
fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "noiseDetach", "I"); fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "noiseDetach", "I");
cParams.ImageProcess.NosieDetach = env->GetIntField(fieldObj, fieldId); cParams.ImageProcess.NosieDetach = env->GetIntField(fieldObj, fieldId);
LOG("JAVA--- NosieDetach =%d \n", cParams.ImageProcess.NosieDetach); LOG("JAVA--- NosieDetach =%d \n", cParams.ImageProcess.NosieDetach);
@ -455,73 +471,172 @@ Java_com_huagao_scanner_DeviceManager_setScanParam(JNIEnv * env, jobject thiz, j
LOG("JAVA--- doubleFeedDetection =%d \n", cParams.HardwareParam.doubleFeedDetection); LOG("JAVA--- doubleFeedDetection =%d \n", cParams.HardwareParam.doubleFeedDetection);
return HG_Set_Scan_Params(mScanner, cParams); return HG_Set_Scan_Params(mScanner, cParams);
}
return false;
} }
extern "C" extern "C"
JNIEXPORT jobject JNICALL JNIEXPORT jobject JNICALL
Java_com_huagao_scanner_DeviceManager_getScanParam(JNIEnv * env, jobject thiz) Java_com_huagao_scanner_DeviceManager_getScanParam(JNIEnv * env, jobject thiz) {
{
HG_SCANPARAMS cparams; HG_SCANPARAMS cparams;
if (mScanner) if (mScanner) {
{
HG_Get_Scan_Params(mScanner, &cparams); HG_Get_Scan_Params(mScanner, &cparams);
jclass myclass = env->FindClass("com/huagao/scanner/ScanParam"); jclass myclass = env->FindClass("com/huagao/scanner/ScanParam");
jmethodID id = env->GetMethodID(myclass, "<init>", "()V"); jmethodID id=env->GetMethodID(myclass,"<init>","()V");
jobject jvScanparam = env->NewObject(myclass, id);//调用构造函数 jobject jvScanparam = env->NewObject(myclass, id);//调用构造函数
// jfieldID fieldId = env->GetFieldID(myclass, "colorMode", "Lcom/huagao/scanner/enums/ColorMode;");
// env->SetIntField(jvScanparam, fieldId, (jint)cparams.PixelType);
// fieldId = env->GetFieldID(myclass, "multiOutput", "Lcom/huagao/scanner/enums/MultiOutput;");
// env->SetIntField(jvScanparam, fieldId, (jint)cparams.MultiOutput);
// fieldId = env->GetFieldID(myclass, "paperType", "Lcom/huagao/scanner/enums/PaperType;");
// env->SetIntField(jvScanparam, fieldId, (jint)cparams.PaperSize);
// fieldId = env->GetFieldID(myclass, "paperAlign", "Lcom/huagao/scanner/enums/PaperAlign;");
// env->SetIntField(jvScanparam, fieldId, cparams.PaperAlign);
// fieldId = env->GetFieldID(myclass, "resolution", "I");
// env->SetIntField(jvScanparam, fieldId, cparams.Resolution);
// fieldId = env->GetFieldID(myclass, "scanSide", "Lcom/huagao/scanner/params/ScanSide;");
// jobject fieldObj = env->GetObjectField(jvScanparam, fieldId);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "switchFrontBack", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ScanSide.SwitchFrontBack);//交换正反面
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "discardBlank", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ScanSide.DiscardBlank);//跳过空白页通用
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "discardBlankVince", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ScanSide.DiscardBlankVince);//跳过空白页发票
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "duplex", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ScanSide.Duplex);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "fold", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ScanSide.Fold);
// fieldId = env->GetFieldID(myclass, "imageProcessParams", "Lcom/huagao/scanner/params/ImageProcessParams;");
// fieldObj = env->GetObjectField(jvScanparam, fieldId);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "answerSheetFilterRed", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.AnswerSheetFilterRed);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "autoCrop", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.AutoCrop);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "autoCropThreshold", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.AutoCrop_threshold);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "autoDescrew", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.AutoDescrew);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "backRotate180", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.BackRotate180);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "colorCorrection", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.ColorCorrection);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "contrast", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.Contrast);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "brightness", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.Brightness);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "errorExtention", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.ErrorExtention);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "fillBlackRect", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.FillBlackRect);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "fillHole", "Lcom/huagao/scanner/params/FillHole;");
// jobject fFieldObj = env->GetObjectField(fieldObj, fieldId);
// fieldId = env->GetFieldID(env->GetObjectClass(fFieldObj), "enbaleFileHole", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.FillHole.enable);
// fieldId = env->GetFieldID(env->GetObjectClass(fFieldObj), "SearchRatio", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.FillHole.ratio);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "filter", "Lcom/huagao/scanner/enums/Filter;");
// fFieldObj = env->GetObjectField(fieldObj, fieldId);
// fieldId = env->GetFieldID(env->GetObjectClass(fFieldObj), "value", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.Filter);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "gamma", "F");
// env->SetFloatField(fieldObj, fieldId, cparams.ImageProcess.Gamma);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "indent", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.Indent);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "IsConvex", "Z");
// env->SetBooleanField(fieldObj, fieldId,(jboolean)cparams.ImageProcess.Is_convex);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "multiOutFilterRed", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.MultiOutFilterRed);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "noise", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.Noise);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "noiseDetach", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.NosieDetach);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "orentation", "Lcom/huagao/scanner/enums/Orentation;");
// fFieldObj = env->GetObjectField(fieldObj, fieldId);
// fieldId = env->GetFieldID(env->GetObjectClass(fFieldObj), "value", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.Orentation);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "refuseInflow", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.RefuseInflow);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "removeMorre", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.RemoveMorr);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "sharpenType", "Lcom/huagao/scanner/enums/SharpenType;");
// fFieldObj = env->GetObjectField(fieldObj, fieldId);
// fieldId = env->GetFieldID(env->GetObjectClass(fFieldObj), "value", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.SharpenType);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "splitImage", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.SplitImage);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "textureRemove", "I");
// env->SetIntField(fieldObj, fieldId, cparams.ImageProcess.TextureRemove);
// fieldId = env->GetFieldID(myclass, "hardwareCaps", "Lcom/huagao/scanner/params/HardwareCaps;");
// fieldObj = env->GetObjectField(jvScanparam, fieldId);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "bindingDetect", "I");
// env->SetIntField(fieldObj, fieldId, cparams.HardwareParam.bindingDetection);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "capturePixType", "I");
// env->SetIntField(fieldObj, fieldId, cparams.PixelType);
// fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "doubleFeedDetection", "I");
// env->SetIntField(fieldObj, fieldId, cparams.HardwareParam.doubleFeedDetection);
return jvScanparam; return jvScanparam;
} }
return nullptr; return nullptr;
} }
extern "C" extern "C"
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_com_huagao_scanner_DeviceManager_startScan(JNIEnv * env, jobject thiz, jint count) Java_com_huagao_scanner_DeviceManager_startScan(JNIEnv *env, jobject thiz, jint count) {
{
LOG("JAVA--- strat scan\n"); LOG("JAVA--- strat scan\n");
return HG_StartScan(mScanner, count); return HG_StartScan(mScanner, count);
} }
extern "C" extern "C"
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_com_huagao_scanner_DeviceManager_stopScan(JNIEnv * env, jobject thiz) Java_com_huagao_scanner_DeviceManager_stopScan(JNIEnv *env, jobject thiz) {
{ LOG("JAVA--- stop scan\n");
return HG_StopScan(mScanner); return HG_StopScan(mScanner);
} }
extern "C" extern "C"
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_com_huagao_scanner_DeviceManager_isRunning(JNIEnv * env, jobject thiz) Java_com_huagao_scanner_DeviceManager_isRunning(JNIEnv *env, jobject thiz) {
{
if (mScanner) if (mScanner)
{
LOG("JAVA--- scanner is running\n");
return HG_Is_Running(mScanner) != 0; return HG_Is_Running(mScanner) != 0;
}
return 0; return 0;
} }
extern "C" extern "C"
JNIEXPORT jboolean JNICALL JNIEXPORT jboolean JNICALL
Java_com_huagao_scanner_DeviceManager_isPaperPutted(JNIEnv * env, jobject thiz) Java_com_huagao_scanner_DeviceManager_isPaperPutted(JNIEnv *env, jobject thiz) {
{
if (mScanner) if (mScanner)
{
return HG_Is_FeederLoaded(mScanner) != 0; return HG_Is_FeederLoaded(mScanner) != 0;
}
return 0; return 0;
} }
extern "C" extern "C"
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_com_huagao_scanner_DeviceManager_setImageCallback(JNIEnv * env, jobject thiz, jobject callback) Java_com_huagao_scanner_DeviceManager_setImageCallback(JNIEnv *env, jobject thiz, jobject callback) {
{ if (mUserCallback) {
if (mUserCallback)
env->DeleteGlobalRef(mUserCallback); env->DeleteGlobalRef(mUserCallback);
}
mUserCallback = env->NewGlobalRef(callback); mUserCallback = env->NewGlobalRef(callback);
} }
extern "C" extern "C"
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_com_huagao_scanner_DeviceManager_createMultiDocs(JNIEnv * env, jobject thiz, jobjectArray src_files, jstring dest_path) Java_com_huagao_scanner_DeviceManager_createMultiDocs(JNIEnv *env, jobject thiz, jobjectArray src_files, jstring dest_path) {
{
//const int len = env->GetArrayLength(src_files); //const int len = env->GetArrayLength(src_files);
//char** cSrcPaths = new char*[len]; //char** cSrcPaths = new char*[len];
@ -538,72 +653,51 @@ Java_com_huagao_scanner_DeviceManager_createMultiDocs(JNIEnv * env, jobject thiz
//} //}
//delete[] cSrcPaths; //delete[] cSrcPaths;
jint ret = 0; return 0;
return ret;
} }
extern "C"
JNIEXPORT jint JNICALL
Java_com_huagao_scanner_DeviceManager_createMultiTiffs(JNIEnv * env, jobject thiz, jobjectArray src_files, jstring dest_path)
{
const int len = env->GetArrayLength(src_files);
char** cSrcPaths = new char* [len];
for (int i = 0; i < len; i++)
{
jstring jPath = (jstring)env->GetObjectArrayElement(src_files, i);
jsize strlen = env->GetStringUTFLength(jPath);
{
cSrcPaths[i] = new char[strlen];
cSrcPaths[i] = const_cast<char*>(env->GetStringUTFChars(jPath, nullptr));
}
}
char* cDestPath = const_cast<char*>(env->GetStringUTFChars(dest_path, 0));
jint ret = HG_Create_MultiTiff(cSrcPaths, len, cDestPath);
env->ReleaseStringUTFChars(dest_path, cDestPath);
for (int i = 0; i < len; i++)
{
jstring jPath = (jstring)env->GetObjectArrayElement(src_files, i);
env->ReleaseStringUTFChars(jPath, cSrcPaths[i]);
}
delete[] cSrcPaths;
return ret;
}
extern "C" extern "C"
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_com_huagao_scanner_DeviceManager_getSDKVersion(JNIEnv * env, jobject thiz) Java_com_huagao_scanner_DeviceManager_getSDKVersion(JNIEnv * env, jobject thiz) {
{ LOG("enter getDevices\n");
char* cVersion = HG_GetSDKVersion(); char* cVersion = HG_GetSDKVersion();
if (cVersion == nullptr) {
LOG("JAVA--- get SDKVersion is NULL\n");
return NULL;
}
LOG("JAVA--- get SDKVersion:%s\n", cVersion); LOG("JAVA--- get SDKVersion:%s\n", cVersion);
if (cVersion == nullptr)
return NULL;
jstring strver = env->NewStringUTF(cVersion); jstring strver = env->NewStringUTF(cVersion);
return strver; return strver;
} }
extern "C" extern "C"
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_com_huagao_scanner_DeviceManager_getFwVersion(JNIEnv * env, jobject thiz) Java_com_huagao_scanner_DeviceManager_getFwVersion(JNIEnv * env, jobject thiz) {
{
const char* cVersion = HG_GetFwVersion(mScanner); const char* cVersion = HG_GetFwVersion(mScanner);
LOG("JAVA--- get version:%s\n", cVersion);
if (cVersion == nullptr) if (cVersion == nullptr)
{
LOG("JAVA--- get FwVersion is null\r\n");
return NULL; return NULL;
}
LOG("JAVA--- get FwVersion:%s\n", cVersion);
jstring strver = env->NewStringUTF(cVersion); jstring strver = env->NewStringUTF(cVersion);
return strver; return strver;
} }
extern "C" extern "C"
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_com_huagao_scanner_DeviceManager_getSerialNum(JNIEnv * env, jobject thiz) Java_com_huagao_scanner_DeviceManager_getSerialNum(JNIEnv * env, jobject thiz) {
{
const char* cVersion = HG_GetSerialNum(mScanner);
LOG("JAVA--- getSerialNum =%s \n", cVersion);
if (cVersion == nullptr)
return NULL;
const char* cVersion = HG_GetSerialNum(mScanner);
if (cVersion == nullptr)
{
LOG("JAVA--- get GetSerialNum is null \r\n");
return NULL;
}
LOG("JAVA--- get GetSerialNum:%s\n", cVersion);
jstring strver = env->NewStringUTF(cVersion); jstring strver = env->NewStringUTF(cVersion);
return strver; return strver;
} }