From 8d54f1c9dc202f1134938be05fd41bb3d6dc753a Mon Sep 17 00:00:00 2001 From: Developer Date: Tue, 12 May 2026 23:05:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8B=BC=E5=9B=BE=E8=B4=A8=E9=87=8F?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=88=86=E8=BE=A8=E7=8E=87=E7=BC=A9=E6=94=BE?= =?UTF-8?q?=EF=BC=8C=E9=AB=98=E6=B8=8580%/=E6=A0=87=E5=87=8650%/=E6=B5=81?= =?UTF-8?q?=E7=95=8530%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../camera/data/models/WatermarkModels.kt | 8 +++--- .../inspection/camera/ui/merge/MergeScreen.kt | 2 +- .../inspection/camera/util/ImageProcessor.kt | 26 ++++++++++++++++--- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/inspection/camera/data/models/WatermarkModels.kt b/app/src/main/java/com/inspection/camera/data/models/WatermarkModels.kt index 1b3cb83..8aefb0d 100644 --- a/app/src/main/java/com/inspection/camera/data/models/WatermarkModels.kt +++ b/app/src/main/java/com/inspection/camera/data/models/WatermarkModels.kt @@ -51,10 +51,10 @@ enum class LocationMode { /** * 图片质量 */ -enum class ImageQuality(val quality: Int, val displayName: String) { - High(100, "高清"), - Standard(85, "标准"), - Low(70, "流畅") +enum class ImageQuality(val quality: Int, val displayName: String, val scaleFactor: Float) { + High(100, "高清", 0.8f), + Standard(85, "标准", 0.5f), + Low(70, "流畅", 0.3f) } /** diff --git a/app/src/main/java/com/inspection/camera/ui/merge/MergeScreen.kt b/app/src/main/java/com/inspection/camera/ui/merge/MergeScreen.kt index 7cdb9b2..e0cff9d 100644 --- a/app/src/main/java/com/inspection/camera/ui/merge/MergeScreen.kt +++ b/app/src/main/java/com/inspection/camera/ui/merge/MergeScreen.kt @@ -520,7 +520,7 @@ fun MergeScreen( context, imageItems, layoutType, - imageQuality, + ImageQuality.High, title, content, titleStyle, diff --git a/app/src/main/java/com/inspection/camera/util/ImageProcessor.kt b/app/src/main/java/com/inspection/camera/util/ImageProcessor.kt index 66586ec..4987063 100644 --- a/app/src/main/java/com/inspection/camera/util/ImageProcessor.kt +++ b/app/src/main/java/com/inspection/camera/util/ImageProcessor.kt @@ -231,10 +231,28 @@ object ImageProcessor { val cols = layoutType.cols val rows = layoutType.rows - val outputWidth = 1920 - val cellSpacing = 16 // 单元格间距 16px (约 4dp * 4) - val cellWidth = (outputWidth - cellSpacing * (cols + 1)) / cols - val cellHeight = cellWidth // 保持正方形格子 + val cellSpacing = 16 + val maxCellDimension = 800 + + // 根据第一张图片的原始尺寸确定单元格宽高比 + val firstBitmap = images.firstOrNull()?.let { tryLoadBitmap(context, it) } + val (srcW, srcH) = if (firstBitmap != null) { + Pair(firstBitmap.width, firstBitmap.height).also { firstBitmap.recycle() } + } else { + Pair(1, 1) + } + + // 基准单元格大小(限制不超过maxCellDimension) + val longer = maxOf(srcW, srcH) + val baseScale = if (longer > maxCellDimension) maxCellDimension.toFloat() / longer else 1.0f + val baseCellWidth = (srcW * baseScale).toInt() + val baseCellHeight = (srcH * baseScale).toInt() + + // 根据质量等级缩放 + val cellWidth = (baseCellWidth * quality.scaleFactor).toInt().coerceAtLeast(1) + val cellHeight = (baseCellHeight * quality.scaleFactor).toInt().coerceAtLeast(1) + + val outputWidth = (cellWidth * cols + cellSpacing * (cols + 1)).coerceAtLeast(480) // 底部文字区域高度 - 动态计算 val textAreaHeight = if (bottomTitle.isNotBlank() || bottomContent.isNotBlank()) {