我们正在解析显示分辨率为 2121x105 像素的文本片段的图像。在 Java 中,我们有以下代码来获取字节数组(我们的约束之一是在此处使用字节数组):
import org.apache.commons.io.IOUtils;
...
InputStream is = getAssets().open("images/text.png");
byte[] bytes = IOUtils.toByteArray(is);
然后将此字节数组传递给本机 C++ 代码 - 我们没有使用 tess-two 的 Java 包装器,但我们使用了本机库。在本机代码中,我们尝试使用GetUTF8Text()获取图像的文本。然后我们看到 tess-two 已经有一个实现,用于通过将图像作为字节数组传递来设置要读取的图像:
void Java_com_..._TessBaseAPI_nativeSetImageBytes(JNIEnv *env,
jobject thiz,
jlong mNativeData,
jbyteArray data,
jint width,
jint height,
jint bpp,
jint bpl) {
...
我们认为PNG 的bpp应该是 4 (RGBA)。目前尚不清楚bpl 的预期是什么。如果我们设置由bpp乘以的图像的宽度,那么我们会得到一个分割错误。如果我们将其设置为零,则返回一个空字符串。
更新: 分割错误是在GetUTF8Text()而不是在SetImage() 中引发的。
SIGSEGV (signal SIGSEGV: invalid address (fault address: 0xc))
慕尼黑8549860
相关分类