Extract detect_image_ad

Signed-off-by: Dude so hot <djohn@fbi.gov>
This commit is contained in:
Dude so hot authored and renovate[bot] committed 2024-09-14 20:08:51 +08:00
1 parent 69370efcf5
commit 04103f9280
1 file changed
+12 -6
+12 -6
View File
@@ -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)
})
}