From 04103f9280e4002ff62a24e09337a46fdb8b3ebf Mon Sep 17 00:00:00 2001 From: Dude so hot Date: Sat, 14 Sep 2024 19:24:13 +0800 Subject: [PATCH] Extract detect_image_ad Signed-off-by: Dude so hot --- app/src/main/rust/src/image/qr_code.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/app/src/main/rust/src/image/qr_code.rs b/app/src/main/rust/src/image/qr_code.rs index 87e0bbb28..55536fb17 100644 --- a/app/src/main/rust/src/image/qr_code.rs +++ b/app/src/main/rust/src/image/qr_code.rs @@ -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 for Nothing { } } +fn detect_image_ad(image: &D) -> bool +where + D: GenericImageView>, +{ + 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) }) }