Fix: differentiate Default/Simple/Bold watermark styles - Simple now uses lighter bg with dark text
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
#Fri Mar 06 19:06:55 CST 2026
|
#Fri Mar 06 21:58:44 CST 2026
|
||||||
path.4=14/classes.dex
|
path.4=14/classes.dex
|
||||||
path.3=12/classes.dex
|
path.3=12/classes.dex
|
||||||
path.2=10/classes.dex
|
path.2=10/classes.dex
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
|||||||
פ8מ)ת*
|
פ8מ)ת*ר'‗&
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,2 +1,2 @@
|
|||||||
28
|
33
|
||||||
0
|
0
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
|
|||||||
ëXè¾ú¹Ñ~Ì>Ňôï`
|
ëXè¾ú¹Ñ~Ì>Ňôï`ý¿ÄJùÉïNÔ›î×
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -90,7 +90,7 @@ fun CameraScreen(
|
|||||||
onNavigateToSettings: () -> Unit,
|
onNavigateToSettings: () -> Unit,
|
||||||
onNavigateToMerge: (List<Uri>) -> Unit,
|
onNavigateToMerge: (List<Uri>) -> Unit,
|
||||||
preferencesManager: PreferencesManager
|
preferencesManager: PreferencesManager
|
||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
|
|
||||||
@@ -99,6 +99,7 @@ fun CameraScreen(
|
|||||||
var isCapturing by remember { mutableStateOf(false) }
|
var isCapturing by remember { mutableStateOf(false) }
|
||||||
var flashMode by remember { mutableIntStateOf(ImageCapture.FLASH_MODE_AUTO) }
|
var flashMode by remember { mutableIntStateOf(ImageCapture.FLASH_MODE_AUTO) }
|
||||||
var locationText by remember { mutableStateOf("") }
|
var locationText by remember { mutableStateOf("") }
|
||||||
|
var recorderName by remember { mutableStateOf("") }
|
||||||
var isLocationLoading by remember { mutableStateOf(true) }
|
var isLocationLoading by remember { mutableStateOf(true) }
|
||||||
var currentWatermarkStyle by remember { mutableStateOf(WatermarkStyle.Default) }
|
var currentWatermarkStyle by remember { mutableStateOf(WatermarkStyle.Default) }
|
||||||
var currentImageQuality by remember { mutableStateOf(ImageQuality.Standard) }
|
var currentImageQuality by remember { mutableStateOf(ImageQuality.Standard) }
|
||||||
@@ -113,6 +114,11 @@ fun CameraScreen(
|
|||||||
shutterSound.load(MediaActionSound.SHUTTER_CLICK)
|
shutterSound.load(MediaActionSound.SHUTTER_CLICK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 读取记录人信息(偏好)
|
||||||
|
LaunchedEffect(Unit) {
|
||||||
|
preferencesManager.recorderName.collect { recorderName = it }
|
||||||
|
}
|
||||||
|
|
||||||
// 权限状态
|
// 权限状态
|
||||||
val permissionsState = rememberMultiplePermissionsState(
|
val permissionsState = rememberMultiplePermissionsState(
|
||||||
permissions = listOf(
|
permissions = listOf(
|
||||||
@@ -234,7 +240,8 @@ fun CameraScreen(
|
|||||||
shutterSound.play(MediaActionSound.SHUTTER_CLICK)
|
shutterSound.play(MediaActionSound.SHUTTER_CLICK)
|
||||||
flashVisible = true
|
flashVisible = true
|
||||||
scope.launch { delay(150); flashVisible = false }
|
scope.launch { delay(150); flashVisible = false }
|
||||||
}
|
},
|
||||||
|
recorderName = recorderName
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -527,7 +534,8 @@ private fun capturePhoto(
|
|||||||
locationText: String,
|
locationText: String,
|
||||||
onComplete: (Uri) -> Unit,
|
onComplete: (Uri) -> Unit,
|
||||||
onError: () -> Unit = {},
|
onError: () -> Unit = {},
|
||||||
onFeedback: (() -> Unit)? = null
|
onFeedback: (() -> Unit)? = null,
|
||||||
|
recorderName: String = ""
|
||||||
) {
|
) {
|
||||||
Log.d("CameraScreen", "capturePhoto called, locationText=$locationText")
|
Log.d("CameraScreen", "capturePhoto called, locationText=$locationText")
|
||||||
val photoFile = File(
|
val photoFile = File(
|
||||||
@@ -559,7 +567,8 @@ private fun capturePhoto(
|
|||||||
bitmap,
|
bitmap,
|
||||||
timeText,
|
timeText,
|
||||||
locationText,
|
locationText,
|
||||||
watermarkStyle
|
watermarkStyle,
|
||||||
|
recorderName
|
||||||
)
|
)
|
||||||
|
|
||||||
// 保存到相册
|
// 保存到相册
|
||||||
|
|||||||
@@ -98,7 +98,8 @@ object ImageProcessor {
|
|||||||
sourceBitmap: Bitmap,
|
sourceBitmap: Bitmap,
|
||||||
timeText: String,
|
timeText: String,
|
||||||
locationText: String,
|
locationText: String,
|
||||||
style: WatermarkStyle
|
style: WatermarkStyle,
|
||||||
|
recorderName: String = ""
|
||||||
): Bitmap {
|
): Bitmap {
|
||||||
val result = sourceBitmap.copy(Bitmap.Config.ARGB_8888, true)
|
val result = sourceBitmap.copy(Bitmap.Config.ARGB_8888, true)
|
||||||
val canvas = Canvas(result)
|
val canvas = Canvas(result)
|
||||||
@@ -111,6 +112,18 @@ object ImageProcessor {
|
|||||||
if (timeText.isNotBlank()) lines.add(timeText)
|
if (timeText.isNotBlank()) lines.add(timeText)
|
||||||
if (locationText.isNotBlank()) lines.add(locationText)
|
if (locationText.isNotBlank()) lines.add(locationText)
|
||||||
|
|
||||||
|
val bgColor = when (style) {
|
||||||
|
WatermarkStyle.Default -> android.graphics.Color.argb(180, 40, 40, 40)
|
||||||
|
WatermarkStyle.Simple -> android.graphics.Color.argb(180, 100, 100, 100)
|
||||||
|
WatermarkStyle.Bold -> android.graphics.Color.argb(180, 0, 122, 255)
|
||||||
|
else -> android.graphics.Color.argb(180, 40, 40, 40)
|
||||||
|
}
|
||||||
|
|
||||||
|
val textColor = when (style) {
|
||||||
|
WatermarkStyle.Simple -> android.graphics.Color.argb(230, 30, 30, 30)
|
||||||
|
else -> android.graphics.Color.argb(230, 255, 255, 255)
|
||||||
|
}
|
||||||
|
|
||||||
if (lines.isNotEmpty()) {
|
if (lines.isNotEmpty()) {
|
||||||
val textAreaHeight = lines.size * lineHeight + padding * 2
|
val textAreaHeight = lines.size * lineHeight + padding * 2
|
||||||
val textAreaWidth = result.width * 0.5f
|
val textAreaWidth = result.width * 0.5f
|
||||||
@@ -118,11 +131,11 @@ object ImageProcessor {
|
|||||||
val textAreaTop = result.height - textAreaHeight - padding / 2
|
val textAreaTop = result.height - textAreaHeight - padding / 2
|
||||||
|
|
||||||
val bgPaint = android.graphics.Paint().apply {
|
val bgPaint = android.graphics.Paint().apply {
|
||||||
color = android.graphics.Color.argb(180, 40, 40, 40)
|
color = bgColor
|
||||||
}
|
}
|
||||||
canvas.drawRoundRect(
|
canvas.drawRoundRect(
|
||||||
textAreaLeft - padding / 2,
|
textAreaLeft - padding / 2,
|
||||||
textAreaTop,
|
textAreaTop.toFloat(),
|
||||||
result.width.toFloat(),
|
result.width.toFloat(),
|
||||||
result.height.toFloat(),
|
result.height.toFloat(),
|
||||||
20f, 20f, bgPaint
|
20f, 20f, bgPaint
|
||||||
@@ -145,7 +158,7 @@ object ImageProcessor {
|
|||||||
val textPaint = android.graphics.Paint().apply {
|
val textPaint = android.graphics.Paint().apply {
|
||||||
isAntiAlias = true
|
isAntiAlias = true
|
||||||
textSize = baseFontSize
|
textSize = baseFontSize
|
||||||
color = android.graphics.Color.argb(230, 255, 255, 255)
|
color = textColor
|
||||||
typeface = Typeface.create("sans-serif-medium", Typeface.NORMAL)
|
typeface = Typeface.create("sans-serif-medium", Typeface.NORMAL)
|
||||||
textAlign = android.graphics.Paint.Align.RIGHT
|
textAlign = android.graphics.Paint.Align.RIGHT
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user