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
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
fi
@ -37,6 +37,9 @@ if [ "${1}" == "hw" ] || [ "${1}" == "hwweb" ] || [ "${1}" == "hwso" ]; then
elif [ "${1}" == "lsc" ] || [ "${1}" == "lscweb" ] || [ "${1}" == "lscso" ]; then
prefix="Lsc"
prefix2="lsc"
elif [ "${1}" == "cts" ] || [ "${1}" == "ctsweb" ] || [ "${1}" == "ctsso" ]; then
prefix="Cts"
prefix2="cts"
fi
echo ${prefix}
@ -104,7 +107,7 @@ rm -f Makefile
rm -rf obj
rm HGImgProcTmp.cbp
if [ "${1}" == "hgweb" ] || [ "${1}" == "hwweb" ] || [ "${1}" == "lscweb" ]; then
if [ "${1}" == "hgweb" ] || [ "${1}" == "hwweb" ] || [ "${1}" == "lscweb" ] || [ "${1}" == "ctsweb" ]; then
cd ../HGWebService
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
elif [ "${1}" == "lscweb" ]; then
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
sed -i "s/-lHGBase/-l${prefix}Base/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
elif [ "${1}" == "lscweb" ]; then
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
sed -i "s/-lHGBase/-l${prefix}Base/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 HGWebScanTmp.cbp
elif [ "${1}" == "hgso" ] || [ "${1}" == "hwso" ] || [ "${1}" == "lscso" ]; then
elif [ "${1}" == "hgso" ] || [ "${1}" == "hwso" ] || [ "${1}" == "lscso" ] || [ "${1}" == "ctsso" ]; then
cd ../HGScannerLib
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
elif [ "${1}" == "lscso" ]; then
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
sed -i "s/-lHGBase/-l${prefix}Base/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
elif [ "${1}" == "lsc" ]; then
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
sed -i "s/-lHGBase/-l${prefix}Base/g" HGVersionTmp.cbp
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/hgdriver/hwdriver/g" HGScannerTmp.pro
sed -i "s/HuaGoScan/HanvonScan/g" HGScannerTmp.pro
sed -i "s/HGBase/HwBase/g" HGScannerTmp.pro
sed -i "s/HGImgFmt/HwImgFmt/g" HGScannerTmp.pro
sed -i "s/HGImgProc/HwImgProc/g" HGScannerTmp.pro
sed -i "s/HGBase/HwBase/g" HGScannerTmp.pro
sed -i "s/HGImgFmt/HwImgFmt/g" HGScannerTmp.pro
sed -i "s/HGImgProc/HwImgProc/g" HGScannerTmp.pro
sed -i "s/logo.ico/Hanvon_logo1.ico/g" HGScannerTmp.pro
elif [ "${1}" == "lsc" ]; then
sed -i "s/OEM_HUAGAO/OEM_LISICHENG/g" HGScannerTmp.pro
sed -i "s/hgsane/lscsane/g" HGScannerTmp.pro
sed -i "s/hgdriver/lscdriver/g" HGScannerTmp.pro
sed -i "s/HuaGoScan/LanxumScan/g" HGScannerTmp.pro
sed -i "s/HGBase/LscBase/g" HGScannerTmp.pro
sed -i "s/HGImgFmt/LscImgFmt/g" HGScannerTmp.pro
sed -i "s/HGImgProc/LscImgProc/g" HGScannerTmp.pro
sed -i "s/HGBase/LscBase/g" HGScannerTmp.pro
sed -i "s/HGImgFmt/LscImgFmt/g" HGScannerTmp.pro
sed -i "s/HGImgProc/LscImgProc/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
qmake -qt=qt5 -makefile HGScannerTmp.pro
@ -230,6 +250,12 @@ else #APP
sed -i "s/HGBase/LscBase/g" HGUpgradeTmp.pro
sed -i "s/HGVersion/LscVersion/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
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);
}
if (m_params.MultiOutput == HG_Unused)
boolValue = m_params.MultiOutput == HG_Unused ? false : true;
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_DLSC, &boolValue);
if (boolValue)
{
boolValue = false;
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_DLSC, &boolValue);
}
else
{
boolValue = true;
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_DLSC, &boolValue);
}
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;
if (m_params.MultiOutput == HG_All)
enumValue = HGLIB_OPTION_ENUMVALUE_DLSCLX_CS_HD_HB;
else if (m_params.MultiOutput == HG_ColorGray)
enumValue = HGLIB_OPTION_ENUMVALUE_DLSCLX_CS_HD;
else if (m_params.MultiOutput == HG_ColorBw)
enumValue = HGLIB_OPTION_ENUMVALUE_DLSCLX_CS_HB;
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)
{
@ -585,9 +568,12 @@ int SetDeviceParam(HG_Scanner_Handle pScanner)
boolValue = m_params.ImageProcess.TextureRemove;
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);
intValue = m_params.ImageProcess.NosieDetach;
HGLib_SetDeviceParam((HGLibDevice)pScanner, HGLIB_OPTION_NAME_HBTXZDYH, &intValue);
if (m_params.ImageProcess.SharpenType == HG_STNone)
{
enumValue = HGLIB_OPTION_ENUMVALUE_RHYMH_W;

Binary file not shown.

Binary file not shown.

View File

@ -18,6 +18,7 @@
#include "utlis.h"
#if defined(WIN32)||defined(_WIN32)
#include <Windows.h>
@ -30,13 +31,13 @@
static jobject mUserListener = nullptr;
static jobject mUserCallback = nullptr;
static JavaVM* g_vm = nullptr;
static JavaVM *g_vm = nullptr;
HG_Scanner_Handle mScanner = nullptr;
static jobject gClassLoader;
static jmethodID gFindClassMethod;
static jclass statusClazz;
int indeximg = 0;
static int indexPatch = 0;
static int indexPatch=0;
#define EN_LOG
#ifdef EN_LOG
@ -70,156 +71,167 @@ int writeimage(const char* filename, std::vector<unsigned char>& imagedata) {
return 0;
}
void onReceivedImage(HG_IMG* img, void* obj)
void onReceivedImage(HG_IMG* img, void* obj)
{
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);
if (mUserCallback)
if (!mUserCallback)
{
JNIEnv* env;
jint ret = g_vm->GetEnv((void**)&env, JNI_VERSION_1_6);
if (ret < 0)
g_vm->AttachCurrentThread((void**)&env, NULL);
LOG("JAVA--- mUserCallback is null\n");
return;
}
jclass clazz = env->GetObjectClass(mUserCallback);
indeximg++;
indexPatch++;
cv::Mat matimg(img->height, img->width, img->bitdepth == 24 ? CV_8UC3 : CV_8UC1, img->pimgdata);
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];
JNIEnv* env;
jint ret = g_vm->GetEnv((void**)&env, JNI_VERSION_1_6);
if (ret < 0)
g_vm->AttachCurrentThread((void**)&env, NULL);
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)
jclass clazz = env->GetObjectClass(mUserCallback);
indeximg++;
indexPatch++;
cv::Mat matimg(img->height, img->width, img->bitdepth == 24 ? CV_8UC3 : CV_8UC1, img->pimgdata);
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 ");
path = "C:\\" + filename;//save in the system disk
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
{
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
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
void onEvent(HG_STATUSCODE statuscode, void* obj) {
void onEvent(HG_STATUSCODE statuscode, void *obj)
{
std::lock_guard<std::mutex> lock(m_mutex);
LOG("JAVA--- Enter onEvent callback 1 statuscode=%d \n", (int)statuscode);
if (statuscode <= 0 || statuscode > 13)
return;
if (mUserListener) {
JNIEnv* env;
jint ret = g_vm->GetEnv((void**)&env, JNI_VERSION_1_6);
if (ret < 0)
jint ret2 = g_vm->AttachCurrentThread((void**)&env, NULL);
jclass listenerClazz = env->GetObjectClass(mUserListener);
jmethodID methodEventId = env->GetMethodID(listenerClazz, "onEvent", "(I)V");
env->CallVoidMethod(mUserListener, methodEventId, (jint)statuscode);
if (ret < 0)
g_vm->DetachCurrentThread();
LOG("JAVA--- Enter onEvent callback 10 \n");
if (!mUserListener)
{
LOG("JAVA--- onEvent is NULL\n");
return;
}
JNIEnv *env;
jint ret = g_vm->GetEnv((void **) &env, JNI_VERSION_1_6);
if (ret < 0)
{
jint ret2= g_vm->AttachCurrentThread((void**)&env, NULL);
LOG("JAVA--- Enter AttachCurrentThread ret2=%d \n", (int)ret2);
}
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
JNI_OnLoad(JavaVM * vm, void* reserved)
{
JNIEnv* env;
if (g_vm == nullptr)
JNI_OnLoad(JavaVM *vm, void *reserved) {
LOG("JAVA--- enter JNI_OnLoad\n");
JNIEnv *env;
if (g_vm == nullptr) {
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");
return JNI_ERR;
}
LOG("JAVA--- JNI_OnLoad\n");
LOG("JAVA--- exit JNI_OnLoad\n");
return JNI_VERSION_1_6;
}
extern "C"
JNIEXPORT jobjectArray JNICALL
Java_com_huagao_scanner_DeviceManager_getDevices(JNIEnv * env, jobject thiz)
{
const char* sp = ";";
char* cDevices = HG_GetDevices(const_cast<char*>(sp));
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));
if (cDevices == nullptr)
{
LOG(" JAVA--- getDevices is fail\n");
LOG(" JAVA--- get no device\n");
return NULL;
}
jstring devices = env->NewStringUTF(cDevices);
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(";")));
}
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_Set_OnDeviceEvent_callback(onEvent);
@ -229,21 +241,20 @@ Java_com_huagao_scanner_DeviceManager_init(JNIEnv * env, jobject thiz)
extern "C"
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);
mUserListener = env->NewGlobalRef(listener);
}
extern "C"
JNIEXPORT jboolean JNICALL
Java_com_huagao_scanner_DeviceManager_open(JNIEnv * env, jobject thiz, jstring scanner_name)
{
if (mScanner)
Java_com_huagao_scanner_DeviceManager_open(JNIEnv *env, jobject thiz, jstring scanner_name) {
if (mScanner) {
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);
mScanner = HG_OpenScanner(cName);
env->ReleaseStringUTFChars(scanner_name, cName);
@ -252,8 +263,7 @@ Java_com_huagao_scanner_DeviceManager_open(JNIEnv * env, jobject thiz, jstring s
extern "C"
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)
{
HG_CloseScanner(mScanner);
@ -263,10 +273,14 @@ Java_com_huagao_scanner_DeviceManager_close(JNIEnv * env, jobject thiz)
extern "C"
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;
jclass clazz = env->GetObjectClass(params);
//设置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));
LOG("JAVA--- PixelType =%d \n", cParams.PixelType);
id = env->GetFieldID(clazz, "cacheImgFormat", "Lcom/huagao/scanner/enums/CacheImgFormat;");
fieldObj = env->GetObjectField(params, id);
fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "value", "I");
m_cacheimgformat = static_cast<HG_CACHEIMGFORMAT>(env->GetIntField(fieldObj, fieldId));
//id = env->GetFieldID(clazz, "cacheImgFormat", "Lcom/huagao/scanner/enums/CacheImgFormat;");
//fieldObj = env->GetObjectField(params, id);
//fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "value", "I");
//m_cacheimgformat = static_cast<HG_CACHEIMGFORMAT>(env->GetIntField(fieldObj, fieldId));
id = env->GetFieldID(clazz, "multiOutput", "Lcom/huagao/scanner/enums/MultiOutput;");
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;");
fieldObj = env->GetObjectField(params, id);
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), "noiseDetachEnable", "I");
//cParams.ImageProcess.NosieDetachEnable = env->GetIntField(fieldObj, fieldId);
//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");
cParams.ImageProcess.AutoCrop = env->GetIntField(fieldObj, fieldId);
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");
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);
LOG("JAVA--- ErrorExtention =%d \n", cParams.ImageProcess.ErrorExtention);
fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "fillBlackRect", "I");
cParams.ImageProcess.FillBlackRect = env->GetIntField(fieldObj, fieldId);
LOG("JAVA--- FillBlackRect =%d \n", cParams.ImageProcess.FillBlackRect);
//fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "fillBlackRect", "I");
//cParams.ImageProcess.FillBlackRect = env->GetIntField(fieldObj, fieldId);
//LOG("JAVA--- FillBlackRect =%d \n", cParams.ImageProcess.FillBlackRect);
fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "fillHole", "Lcom/huagao/scanner/params/FillHole;");
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);
LOG("JAVA--- Noise =%d \n", cParams.ImageProcess.Noise);
fieldId = env->GetFieldID(env->GetObjectClass(fieldObj), "noiseDetach", "I");
cParams.ImageProcess.NosieDetach = env->GetIntField(fieldObj, fieldId);
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);
return HG_Set_Scan_Params(mScanner, cParams);
}
return false;
}
extern "C"
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;
if (mScanner)
{
if (mScanner) {
HG_Get_Scan_Params(mScanner, &cparams);
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);//调用构造函数
// 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 nullptr;
}
extern "C"
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");
return HG_StartScan(mScanner, count);
}
extern "C"
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);
}
extern "C"
JNIEXPORT jboolean JNICALL
Java_com_huagao_scanner_DeviceManager_isRunning(JNIEnv * env, jobject thiz)
{
if (mScanner)
Java_com_huagao_scanner_DeviceManager_isRunning(JNIEnv *env, jobject thiz) {
if (mScanner)
{
LOG("JAVA--- scanner is running\n");
return HG_Is_Running(mScanner) != 0;
}
return 0;
}
extern "C"
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)
{
return HG_Is_FeederLoaded(mScanner) != 0;
}
return 0;
}
extern "C"
JNIEXPORT void JNICALL
Java_com_huagao_scanner_DeviceManager_setImageCallback(JNIEnv * env, jobject thiz, jobject callback)
{
if (mUserCallback)
Java_com_huagao_scanner_DeviceManager_setImageCallback(JNIEnv *env, jobject thiz, jobject callback) {
if (mUserCallback) {
env->DeleteGlobalRef(mUserCallback);
}
mUserCallback = env->NewGlobalRef(callback);
}
extern "C"
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);
//char** cSrcPaths = new char*[len];
@ -538,72 +653,51 @@ Java_com_huagao_scanner_DeviceManager_createMultiDocs(JNIEnv * env, jobject thiz
//}
//delete[] cSrcPaths;
jint ret = 0;
return ret;
return 0;
}
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"
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();
if (cVersion == nullptr) {
LOG("JAVA--- get SDKVersion is NULL\n");
return NULL;
}
LOG("JAVA--- get SDKVersion:%s\n", cVersion);
if (cVersion == nullptr)
return NULL;
jstring strver = env->NewStringUTF(cVersion);
return strver;
}
extern "C"
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);
LOG("JAVA--- get version:%s\n", cVersion);
if (cVersion == nullptr)
{
LOG("JAVA--- get FwVersion is null\r\n");
return NULL;
}
LOG("JAVA--- get FwVersion:%s\n", cVersion);
jstring strver = env->NewStringUTF(cVersion);
return strver;
}
extern "C"
JNIEXPORT jstring JNICALL
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;
Java_com_huagao_scanner_DeviceManager_getSerialNum(JNIEnv * env, jobject thiz) {
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);
return strver;
}
@ -611,7 +705,7 @@ Java_com_huagao_scanner_DeviceManager_getSerialNum(JNIEnv * env, jobject thiz)
extern "C"
JNIEXPORT void JNICALL
Java_com_huagao_scanner_DeviceManager_resetPatchIndex(JNIEnv * env, jobject thiz)
Java_com_huagao_scanner_DeviceManager_resetPatchIndex(JNIEnv * env, jobject thiz)
{
indexPatch = 0;
LOG("JAVA--- clean indexPatch:%d\n", indexPatch);