diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 49ccf89..7ffdad2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -28,14 +28,6 @@
-
-
{
+ modeButton.text = "模式: 普通"
+ watermarkEnabled = false
+ }
+ MODE_WATERMARK -> {
+ modeButton.text = "模式: 水印"
+ watermarkEnabled = true
+ }
+ MODE_COMPOSE -> {
+ modeButton.text = "模式: 合成"
+ watermarkEnabled = false
+ }
+ }
+ Toast.makeText(this, "已切换到${getModeName(mode)}", Toast.LENGTH_SHORT).show()
+ }
+
+ private fun getModeName(mode: Int): String {
+ return when (mode) {
+ MODE_PHOTO -> "普通模式"
+ MODE_WATERMARK -> "水印模式"
+ MODE_COMPOSE -> "合成模式"
+ else -> "未知模式"
+ }
+ }
+
}
override fun onDestroy() {
@@ -330,6 +397,110 @@ class CameraActivity : AppCompatActivity() {
}
}
)
+ private fun addWatermarkAndSave(originalUri: Uri) {
+ try {
+ // 读取原始图片
+ val inputStream = contentResolver.openInputStream(originalUri)
+ val originalBitmap = BitmapFactory.decodeStream(inputStream)
+ inputStream?.close()
+
+ if (originalBitmap == null) {
+ Log.e(TAG, "无法读取图片: $originalUri")
+ return
+ }
+
+ // 添加水印
+ val watermarkedBitmap = addWatermark(originalBitmap)
+
+ // 保存带水印的图片
+ val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())
+ val contentValues = ContentValues().apply {
+ put(MediaStore.MediaColumns.DISPLAY_NAME, "巡检_${timestamp}_水印.jpg")
+ put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg")
+ put(MediaStore.MediaColumns.RELATIVE_PATH, "Pictures/LogCam")
+ }
+
+ val uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
+
+ if (uri != null) {
+ val outputStream = contentResolver.openOutputStream(uri)
+
+ if (outputStream != null) {
+ watermarkedBitmap.compress(Bitmap.CompressFormat.JPEG, 95, outputStream)
+ outputStream.close()
+
+ // 通知相册更新
+ MediaStore.Images.Media.insertImage(contentResolver, watermarkedBitmap, contentValues.getAsString(MediaStore.MediaColumns.DISPLAY_NAME), "")
+
+ runOnUiThread {
+ Toast.makeText(baseContext, "图片已保存并添加水印", Toast.LENGTH_LONG).show()
+ addPhotoToPreview(uri)
+ }
+ } else {
+ Log.e(TAG, "无法打开输出流: $uri")
+ }
+ } else {
+ Log.e(TAG, "无法创建新文件")
+ }
+
+ // 回收位图
+ originalBitmap.recycle()
+ watermarkedBitmap.recycle()
+ } catch (e: Exception) {
+ Log.e(TAG, "添加水印失败: ${e.message}", e)
+ runOnUiThread {
+ Toast.makeText(baseContext, "添加水印失败: ${e.message}", Toast.LENGTH_LONG).show()
+ }
+ }
+ }
+
+ private fun addWatermark(originalBitmap: Bitmap): Bitmap {
+ val timestamp = SimpleDateFormat("yyyy年-MM月-dd日 HH:mm:ss", Locale.getDefault()).format(Date())
+
+ // 创建可修改的位图副本
+ val mutableBitmap = originalBitmap.copy(Bitmap.Config.ARGB_8888, true)
+ val canvas = Canvas(mutableBitmap)
+
+ // 创建水印画笔
+ val paint = Paint().apply {
+ color = Color.WHITE
+ textSize = 48f
+ isAntiAlias = true
+ typeface = Typeface.create(Typeface.DEFAULT, Typeface.BOLD)
+ textAlign = Paint.Align.RIGHT
+ }
+
+ // 计算文本大小
+ val bounds = android.graphics.Rect()
+ paint.getTextBounds(timestamp, 0, timestamp.length, bounds)
+
+ // 在右下角绘制时间戳水印
+ val padding = 50f
+ canvas.drawText(
+ timestamp,
+ mutableBitmap.width - padding,
+ mutableBitmap.height - padding - bounds.height(),
+ paint
+ )
+
+ // 绘制白色边框以提高可读性
+ val borderPaint = Paint().apply {
+ color = Color.BLACK
+ strokeWidth = 4f
+ style = Paint.Style.STROKE
+ isAntiAlias = true
+ }
+
+ canvas.drawText(
+ timestamp,
+ mutableBitmap.width - padding,
+ mutableBitmap.height - padding - bounds.height(),
+ borderPaint
+ )
+
+ return mutableBitmap
+ }
+
}
private fun createOutputFileOptions(): ImageCapture.OutputFileOptions {
diff --git a/app/src/main/java/com/example/app/CameraSelectorActivity.kt b/app/src/main/java/com/example/app/CameraSelectorActivity.kt
deleted file mode 100644
index eff3ef0..0000000
--- a/app/src/main/java/com/example/app/CameraSelectorActivity.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.example.app
-
-import android.content.Intent
-import android.os.Bundle
-import android.widget.Button
-import androidx.appcompat.app.AppCompatActivity
-
-class CameraSelectorActivity : AppCompatActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_camera_selector)
-
- val btnSimpleCamera = findViewById