scannerlib完成图像jni接口

This commit is contained in:
luoliangyi 2023-11-03 11:59:43 +08:00
parent 9e5aee9eed
commit 47ed82de45
3 changed files with 69 additions and 26 deletions

View File

@ -36,4 +36,5 @@ Java_com_easing_java_HGScannerLib_LoadImage
Java_com_easing_java_HGScannerLib_SaveImage Java_com_easing_java_HGScannerLib_SaveImage
Java_com_easing_java_HGScannerLib_ReleaseImage Java_com_easing_java_HGScannerLib_ReleaseImage
Java_com_easing_java_HGScannerLib_GetImageInfo Java_com_easing_java_HGScannerLib_GetImageInfo
Java_com_easing_java_HGScannerLib_GetImageData Java_com_easing_java_HGScannerLib_GetImageData
Java_com_easing_java_HGScannerLib_GetImageDpi

View File

@ -17,7 +17,7 @@ extern "C" JNIEXPORT jlong JNICALL Java_com_easing_java_HGScannerLib_LoadImage(
return (jlong)img; return (jlong)img;
} }
extern "C" JNIEXPORT jint JNICALL Java_com_easing_java_HGScannerLib_SaveImage( extern "C" JNIEXPORT jboolean JNICALL Java_com_easing_java_HGScannerLib_SaveImage(
JNIEnv* env, jclass clazz, jlong img, jstring filePath, jobject saveParam) JNIEnv* env, jclass clazz, jlong img, jstring filePath, jobject saveParam)
{ {
printf("\nJava_com_easing_java_HGScannerLib_SaveImage\n"); printf("\nJava_com_easing_java_HGScannerLib_SaveImage\n");
@ -29,7 +29,7 @@ extern "C" JNIEXPORT jint JNICALL Java_com_easing_java_HGScannerLib_SaveImage(
saveParam2.jpegQuality = (HGUInt)env->GetIntField(saveParam, env->GetFieldID(cls, "jpegQuality", "I")); saveParam2.jpegQuality = (HGUInt)env->GetIntField(saveParam, env->GetFieldID(cls, "jpegQuality", "I"));
saveParam2.tiffCompression = (HGUInt)env->GetIntField(saveParam, env->GetFieldID(cls, "tiffCompression", "I")); saveParam2.tiffCompression = (HGUInt)env->GetIntField(saveParam, env->GetFieldID(cls, "tiffCompression", "I"));
saveParam2.tiffJpegQuality = (HGUInt)env->GetIntField(saveParam, env->GetFieldID(cls, "tiffJpegQuality", "I")); saveParam2.tiffJpegQuality = (HGUInt)env->GetIntField(saveParam, env->GetFieldID(cls, "tiffJpegQuality", "I"));
saveParam2.ocr = (HGBool)env->GetIntField(saveParam, env->GetFieldID(cls, "ocr", "I")); saveParam2.ocr = (HGBool)env->GetBooleanField(saveParam, env->GetFieldID(cls, "ocr", "Z"));
printf("jpegQuality=%u\n", saveParam2.jpegQuality); printf("jpegQuality=%u\n", saveParam2.jpegQuality);
printf("tiffCompression=%u\n", saveParam2.tiffCompression); printf("tiffCompression=%u\n", saveParam2.tiffCompression);
printf("tiffJpegQuality=%u\n", saveParam2.tiffJpegQuality); printf("tiffJpegQuality=%u\n", saveParam2.tiffJpegQuality);
@ -43,10 +43,10 @@ extern "C" JNIEXPORT jint JNICALL Java_com_easing_java_HGScannerLib_SaveImage(
env->ReleaseStringUTFChars(filePath, ptr); env->ReleaseStringUTFChars(filePath, ptr);
printf("\n"); printf("\n");
return ret; return (jboolean)ret;
} }
extern "C" JNIEXPORT jint JNICALL Java_com_easing_java_HGScannerLib_ReleaseImage( extern "C" JNIEXPORT jboolean JNICALL Java_com_easing_java_HGScannerLib_ReleaseImage(
JNIEnv* env, jclass clazz, jlong img) JNIEnv* env, jclass clazz, jlong img)
{ {
printf("\nJava_com_easing_java_HGScannerLib_ReleaseImage\n"); printf("\nJava_com_easing_java_HGScannerLib_ReleaseImage\n");
@ -55,20 +55,23 @@ extern "C" JNIEXPORT jint JNICALL Java_com_easing_java_HGScannerLib_ReleaseImage
printf("ret=%d\n", ret); printf("ret=%d\n", ret);
printf("\n"); printf("\n");
return ret; return (jboolean)ret;
} }
extern "C" JNIEXPORT jint JNICALL Java_com_easing_java_HGScannerLib_GetImageInfo( extern "C" JNIEXPORT jobject JNICALL Java_com_easing_java_HGScannerLib_GetImageInfo(
JNIEnv* env, jclass clazz, jlong img, jobject imgInfo) JNIEnv* env, jclass clazz, jlong img)
{ {
printf("\nJava_com_easing_java_HGScannerLib_GetImageInfo\n"); printf("\nJava_com_easing_java_HGScannerLib_GetImageInfo\n");
jclass cls = env->FindClass("com/easing/java/HGLibImageInfo");
jmethodID init = env->GetMethodID(cls, "<init>", "()V");
jobject imgInfo = env->NewObject(cls, init);
HGLibImageInfo imgInfo2 = {0}; HGLibImageInfo imgInfo2 = {0};
HGBool ret = HGLib_GetImageInfo((HGLibImage)img, &imgInfo2); HGBool ret = HGLib_GetImageInfo((HGLibImage)img, &imgInfo2);
printf("ret=%d\n", ret); printf("ret=%d\n", ret);
if (ret) if (ret)
{ {
jclass cls = env->GetObjectClass(imgInfo);
env->SetIntField(imgInfo, env->GetFieldID(cls, "width", "I"), imgInfo2.width); env->SetIntField(imgInfo, env->GetFieldID(cls, "width", "I"), imgInfo2.width);
env->SetIntField(imgInfo, env->GetFieldID(cls, "height", "I"), imgInfo2.height); env->SetIntField(imgInfo, env->GetFieldID(cls, "height", "I"), imgInfo2.height);
env->SetIntField(imgInfo, env->GetFieldID(cls, "type", "I"), imgInfo2.type); env->SetIntField(imgInfo, env->GetFieldID(cls, "type", "I"), imgInfo2.type);
@ -77,7 +80,7 @@ extern "C" JNIEXPORT jint JNICALL Java_com_easing_java_HGScannerLib_GetImageInfo
} }
printf("\n"); printf("\n");
return ret; return imgInfo;
} }
extern "C" JNIEXPORT jbyteArray JNICALL Java_com_easing_java_HGScannerLib_GetImageData( extern "C" JNIEXPORT jbyteArray JNICALL Java_com_easing_java_HGScannerLib_GetImageData(
@ -85,18 +88,50 @@ extern "C" JNIEXPORT jbyteArray JNICALL Java_com_easing_java_HGScannerLib_GetIma
{ {
printf("\nJava_com_easing_java_HGScannerLib_GetImageData\n"); printf("\nJava_com_easing_java_HGScannerLib_GetImageData\n");
jbyteArray ret; jbyteArray imgData;
HGByte *imgData2 = HGLib_GetImageData((HGLibImage)img); HGByte *imgData2 = HGLib_GetImageData((HGLibImage)img);
printf("imgData=0x%p\n", imgData2);
if (NULL != imgData2) if (NULL != imgData2)
{ {
HGLibImageInfo imgInfo = {0}; HGLibImageInfo imgInfo = {0};
if (HGLib_GetImageInfo((HGLibImage)img, &imgInfo)) if (HGLib_GetImageInfo((HGLibImage)img, &imgInfo))
{ {
ret = env->NewByteArray(imgInfo.widthStep * imgInfo.height); imgData = env->NewByteArray(imgInfo.widthStep * imgInfo.height);
env->SetByteArrayRegion(ret, 0, imgInfo.widthStep * imgInfo.height, (const jbyte*)imgData2); env->SetByteArrayRegion(imgData, 0, imgInfo.widthStep * imgInfo.height, (const jbyte*)imgData2);
} }
else
{
imgData = env->NewByteArray(0);
}
}
else
{
imgData = env->NewByteArray(0);
} }
printf("\n"); printf("\n");
return ret; return imgData;
}
extern "C" JNIEXPORT jobject JNICALL Java_com_easing_java_HGScannerLib_GetImageDpi(
JNIEnv* env, jclass clazz, jlong img)
{
printf("\nJava_com_easing_java_HGScannerLib_GetImageDpi\n");
jclass cls = env->FindClass("com/easing/java/HGLibImageDpi");
jmethodID init = env->GetMethodID(cls, "<init>", "()V");
jobject imgDpi = env->NewObject(cls, init);
HGUInt xDpi, yDpi;
HGBool ret = HGLib_GetImageDpi((HGLibImage)img, &xDpi, &yDpi);
printf("ret=%d\n", ret);
if (ret)
{
env->SetIntField(imgDpi, env->GetFieldID(cls, "xDpi", "I"), xDpi);
env->SetIntField(imgDpi, env->GetFieldID(cls, "yDpi", "I"), yDpi);
}
printf("\n");
return imgDpi;
} }

View File

@ -4,7 +4,7 @@ class HGLibSaveImageParam {
public int jpegQuality; public int jpegQuality;
public int tiffCompression; public int tiffCompression;
public int tiffJpegQuality; public int tiffJpegQuality;
public int ocr; public boolean ocr;
} }
class HGLibImageInfo { class HGLibImageInfo {
@ -15,6 +15,11 @@ class HGLibImageInfo {
public int origin; public int origin;
} }
class HGLibImageDpi {
public int xDpi;
public int yDpi;
}
public class HGScannerLib { public class HGScannerLib {
static { static {
@ -22,30 +27,27 @@ public class HGScannerLib {
} }
public native long LoadImage(String filePath); public native long LoadImage(String filePath);
public native int SaveImage(long img, String filePath, HGLibSaveImageParam saveParam); public native boolean SaveImage(long img, String filePath, HGLibSaveImageParam saveParam);
public native int ReleaseImage(long img); public native boolean ReleaseImage(long img);
public native int GetImageInfo(long img, HGLibImageInfo imgInfo); public native HGLibImageInfo GetImageInfo(long img);
public native byte[] GetImageData(long img); public native byte[] GetImageData(long img);
public native HGLibImageDpi GetImageDpi(long img);
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
System.out.println("hello world"); System.out.println("hello world");
HGScannerLib inst = new HGScannerLib(); HGScannerLib inst = new HGScannerLib();
String filePath1 = "D:\\1.png"; long img = inst.LoadImage("D:\\1.png");
long img = inst.LoadImage(filePath1);
HGLibSaveImageParam saveParam = new HGLibSaveImageParam(); HGLibSaveImageParam saveParam = new HGLibSaveImageParam();
saveParam.jpegQuality = 80; saveParam.jpegQuality = 80;
saveParam.tiffCompression = 1; saveParam.tiffCompression = 1;
saveParam.tiffJpegQuality = 70; saveParam.tiffJpegQuality = 70;
saveParam.ocr = 0; saveParam.ocr = false;
inst.SaveImage(img, "D:\\2.png", saveParam);
String filePath2 = "D:\\2.png"; HGLibImageInfo imgInfo = inst.GetImageInfo(img);
inst.SaveImage(img, filePath2, saveParam);
HGLibImageInfo imgInfo = new HGLibImageInfo();
inst.GetImageInfo(img, imgInfo);
System.out.println("ImageInfo:"); System.out.println("ImageInfo:");
System.out.println("width=" + imgInfo.width); System.out.println("width=" + imgInfo.width);
System.out.println("height=" + imgInfo.height); System.out.println("height=" + imgInfo.height);
@ -53,6 +55,11 @@ public class HGScannerLib {
System.out.println("widthStep=" + imgInfo.widthStep); System.out.println("widthStep=" + imgInfo.widthStep);
System.out.println("origin=" + imgInfo.origin); System.out.println("origin=" + imgInfo.origin);
HGLibImageDpi imgDpi = inst.GetImageDpi(img);
System.out.println("ImageDpi:");
System.out.println("xDpi=" + imgDpi.xDpi);
System.out.println("yDpi=" + imgDpi.yDpi);
byte[] imgData = inst.GetImageData(img); byte[] imgData = inst.GetImageData(img);
System.out.println("imgData.length=" + imgData.length); System.out.println("imgData.length=" + imgData.length);