您必须编写一个 JNI 函数,该函数将从 Java 中获取图像并将其转换为 libfprint 的 fp_img 结构(您不能只从 Java 中调用任何 C 库函数)。
libfprint 中的结构如下所示
struct fp_img {
int width;
int height;
size_t length;
uint16_t flags;
struct fp_minutiae *minutiae;
unsigned char *binarized;
unsigned char data[0];
};
libfprint 并不是真的要与外部图像一起使用。通常应该首先使用 libfprint 获取指纹图像。
但是您可以通过调用该函数来创建一个新图像
struct fp_img *fpi_img_new(size_t length)
长度=宽度*高度。问题是,这个函数可能没有在 libfprint 头文件中声明,所以你必须自己声明它或重新实现它。它只是这样做:
struct fp_img *img = malloc(sizeof(struct fp_img) + length);
img->length = length;
然后您可能还应该设置
img->width = width;
img->height = height;
然后,您可以使用此函数访问原始图像数据(8 位灰度)(我假设行列顺序,即 data[x + y*img->width] 将是 (x,y) 像素)。
unsigned char *fp_img_get_data(struct fp_img *img)
您可以将此数组视为 size=length。然后,您可以简单地将 Java 图像的像素写入 JNI 函数中的此数组中。当你最终得到你的图像时,你可以将它传递给 fp_img_binarize 函数。