Scanner
Scanner copied to clipboard
自定义scanner中使用nv21ToBitmap无效
` private IScanner buildScaner() { return new IScanner() { /** * 这里实现自己的识别器,并把识别结果返回 * * @param data 矩形框内nv21图像数据 * @param width 图像宽度 * @param height 图像高度 * @return * @throws Exception */ @Override public Result scan(byte[] data, int width, int height) throws Exception { Result result = new Result();
if (isDataCopied()) {
// 如果你想转为Bitmap,请使用NV21.nv21ToBitmap(byte[] nv21, int width, int height)
NV21 nv21 = new NV21(mContext);
Bitmap bitmap = nv21.nv21ToBitmap(data, width, height); //这里的bitmap为空
try {
tessBaseAPI.setImage(bitmap);
String text = tessBaseAPI.getUTF8Text();
if (text != null) {
Log.i("tess result:", text);
result.data = text;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
};
}
`
nv21.nv21ToBitmap方法返回一直为空
调试下,看下报什么错,正常情况要不抛异常,要不有返回值,不会返回null,还有android版本多少
没返回值时return null,不要有返回值
而且如果你是竖屏扫描,返回的图像是横着的,如果你识别器不支持横图像识别,建议setRotateDegree90Recognition(true)
如果这个方法不行的话,尝试使用以下方法: Bitmap nv21ToBitmap(byte[] nv21, int width, int height) { Bitmap bitmap = null; try { YuvImage image = new YuvImage(nv21, ImageFormat.NV21, width, height, null); ByteArrayOutputStream stream = new ByteArrayOutputStream(); image.compressToJpeg(new Rect(0, 0, width, height), 100, stream); bitmap = BitmapFactory.decodeByteArray(stream.toByteArray(), 0, stream.size()); stream.close(); } catch (Exception e) { e.printStackTrace(); } return bitmap; }