From 1f9edb54edb5fe615090d92e4f5add1e0467a909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Tue, 21 Apr 2026 16:20:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(ocr):=20=E6=B7=BB=E5=8A=A0=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0=E7=85=A7=E7=89=87=E8=B7=AF=E5=BE=84=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E5=96=B7=E6=B4=92=E8=AF=86=E5=88=AB=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在OcrNavigationData数据类中新增localPhotoPath字段 - 在SprayingOCRActivity中传递localPhotoPath到结果页面 - 在SprayingResultActivity中接收并处理localPhotoPath参数 - 集成BitmapDecodeHelper进行图片解码处理 - 使用单线程执行器异步加载和显示本地照片 - 实现图片尺寸采样以优化内存使用 --- .../glass/model/data/SprayingSubmitData.kt | 1 + .../brain/glass/ui/SprayingOCRActivity.kt | 1 + .../brain/glass/ui/SprayingResultActivity.kt | 19 +++++++++++++++++++ .../brain/glass/viewmodel/SprayingOCRVM.kt | 1 + 4 files changed, 22 insertions(+) diff --git a/app/src/main/java/com/nova/brain/glass/model/data/SprayingSubmitData.kt b/app/src/main/java/com/nova/brain/glass/model/data/SprayingSubmitData.kt index 1f6db79..2ec4508 100644 --- a/app/src/main/java/com/nova/brain/glass/model/data/SprayingSubmitData.kt +++ b/app/src/main/java/com/nova/brain/glass/model/data/SprayingSubmitData.kt @@ -34,6 +34,7 @@ data class RecognizeByPathResponse( data class OcrNavigationData( val filePath: String, + val localPhotoPath: String, val ocrResultJson: String, val judgment: String, val one: String, diff --git a/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt index e632a31..b154b98 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/SprayingOCRActivity.kt @@ -123,6 +123,7 @@ class SprayingOCRActivity : putExtra("taskId", taskId) putExtra("productionInfoId", productionInfoId) putExtra("filePath", result.filePath) + putExtra("localPhotoPath", result.localPhotoPath) putExtra("ocrResultJson", result.ocrResultJson) putExtra("judgment", result.judgment) putExtra("one", result.one) diff --git a/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt index bd6599a..8f6a254 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/SprayingResultActivity.kt @@ -10,9 +10,11 @@ import android.os.Looper import android.view.LayoutInflater import android.view.WindowManager import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.view.doOnLayout import androidx.recyclerview.widget.RecyclerView import com.nova.brain.glass.R import com.nova.brain.glass.databinding.ActivitySprayingResultBinding +import com.nova.brain.glass.helper.BitmapDecodeHelper import com.nova.brain.glass.helper.GlassMediaServiceHelper import com.nova.brain.glass.helper.OfflineCmdListener import com.nova.brain.glass.helper.OfflineCmdServiceHelper @@ -31,6 +33,7 @@ import com.xuqm.base.extensions.showMessage import com.xuqm.base.ui.BaseListFormLayoutNormalActivity import java.io.File import java.util.UUID +import java.util.concurrent.Executors class SprayingResultActivity : BaseListFormLayoutNormalActivity() { @@ -48,10 +51,14 @@ class SprayingResultActivity : private val filePath: String by lazy { intent.getStringExtra("filePath").orEmpty() } + private val localPhotoPath: String by lazy { + intent.getStringExtra("localPhotoPath").orEmpty() + } private val ocrResultJson: String by lazy { intent.getStringExtra("ocrResultJson").orEmpty() } + private val imageDecodeExecutor = Executors.newSingleThreadExecutor() private var ocrOne: String = "" private var ocrTwo: String = "" private var status = true @@ -220,6 +227,18 @@ class SprayingResultActivity : binding.value2.paintFlags = binding.value2.paintFlags or strikeFlag binding.value3.paintFlags = binding.value3.paintFlags or strikeFlag } + if (localPhotoPath.isNotBlank()) { + binding.iv.doOnLayout { + val w = it.width.coerceAtLeast(1) + val h = it.height.coerceAtLeast(1) + imageDecodeExecutor.execute { + val bitmap = BitmapDecodeHelper.decodeSampledBitmap(localPhotoPath, w, h) + runOnUiThread { + if (!isFinishing && !isDestroyed) binding.iv.setImageBitmap(bitmap) + } + } + } + } } override fun onResume() { diff --git a/app/src/main/java/com/nova/brain/glass/viewmodel/SprayingOCRVM.kt b/app/src/main/java/com/nova/brain/glass/viewmodel/SprayingOCRVM.kt index 523e674..f0fcf78 100644 --- a/app/src/main/java/com/nova/brain/glass/viewmodel/SprayingOCRVM.kt +++ b/app/src/main/java/com/nova/brain/glass/viewmodel/SprayingOCRVM.kt @@ -90,6 +90,7 @@ class SprayingOCRVM : BaseListViewModel() { val data = response.data ?: OcrResultData() ocrResult.value = OcrNavigationData( filePath = serverPath, + localPhotoPath = localPath, ocrResultJson = gson.toJson(data), judgment = data.judgment, one = data.one,