1 parent
69370efcf5
commit
04103f9280
1 file changed
+12
-6
@@ -4,7 +4,7 @@ use bardecoder::decode::Decode;
|
||||
use bardecoder::default_builder;
|
||||
use bardecoder::extract::QRExtractor;
|
||||
use bardecoder::util::qr::{QRData, QRError};
|
||||
use image::ImageBuffer;
|
||||
use image::{GenericImageView, ImageBuffer, Rgba};
|
||||
use jni::objects::JClass;
|
||||
use jni::sys::{jboolean, jobject};
|
||||
use jni::JNIEnv;
|
||||
@@ -20,6 +20,15 @@ impl Decode<QRData, String, QRError> for Nothing {
|
||||
}
|
||||
}
|
||||
|
||||
fn detect_image_ad<D>(image: &D) -> bool
|
||||
where
|
||||
D: GenericImageView<Pixel = Rgba<u8>>,
|
||||
{
|
||||
let mut decoder = default_builder();
|
||||
decoder.qr(Box::new(QRExtractor {}), Box::new(Nothing {}));
|
||||
decoder.build().decode(image).iter().any(|i| i.is_ok())
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
#[allow(non_snake_case)]
|
||||
#[jni_fn("com.hippo.ehviewer.image.ImageKt")]
|
||||
@@ -30,12 +39,9 @@ pub fn hasQrCode(mut env: JNIEnv, _class: JClass, object: jobject) -> jboolean {
|
||||
let (width, height) = (bitmap_info.width(), bitmap_info.height());
|
||||
let ptr = handle.lock_pixels()? as *const u8;
|
||||
let buffer = unsafe { &*slice_from_raw_parts(ptr, (width * height * 4) as usize) };
|
||||
let mut decoder = default_builder();
|
||||
decoder.qr(Box::new(QRExtractor {}), Box::new(Nothing {}));
|
||||
let image = ImageBuffer::from_raw(width, height, buffer);
|
||||
let result = image.map(|img| decoder.build().decode(&img));
|
||||
let result = image.map(|img| detect_image_ad(&img));
|
||||
handle.unlock_pixels()?;
|
||||
let vec = result.ok_or(anyhow!("Internal Error!"))?;
|
||||
Ok(vec.iter().any(|i| i.is_ok()) as jboolean)
|
||||
Ok(result.ok_or(anyhow!("Internal Error!"))? as jboolean)
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user