diff --git a/app/src/main/java/com/example/app/CameraActivity.kt b/app/src/main/java/com/example/app/CameraActivity.kt index 8b41a08..9e893c2 100644 --- a/app/src/main/java/com/example/app/CameraActivity.kt +++ b/app/src/main/java/com/example/app/CameraActivity.kt @@ -35,16 +35,19 @@ import java.util.concurrent.Executors class CameraActivity : AppCompatActivity() { -companion object { + companion object { private const val TAG = "LogCam" private const val REQUEST_CODE_PERMISSIONS = 10 private val REQUIRED_PERMISSIONS = arrayOf( Manifest.permission.CAMERA ) + + // 拍照模式常量定义 + private const val MODE_PHOTO = 0 // 普通拍照 + private const val MODE_WATERMARK = 1 // 水印模式 + private const val MODE_COMPOSE = 2 // 合成模式 } - - private lateinit var viewFinder: PreviewView private lateinit var captureButton: ImageButton private lateinit var settingsButton: ImageButton @@ -56,12 +59,6 @@ companion object { private var captureMode = MODE_PHOTO // 默认为普通拍照模式 private var watermarkEnabled = true // 是否启用时间戳水印 - // 常量定义 - companion object { - private const val MODE_PHOTO = 0 // 普通拍照 - private const val MODE_WATERMARK = 1 // 水印模式 - private const val MODE_COMPOSE = 2 // 合成模式 - } private lateinit var cameraExecutor: ExecutorService @@ -101,6 +98,8 @@ companion object { // 设置点击监听器 captureButton.setOnClickListener { takePhoto() } settingsButton.setOnClickListener { openSettings() } + } + private fun showModeSelectionDialog() { val popupMenu = PopupMenu(this, modeButton) popupMenu.menu.apply { @@ -210,44 +209,32 @@ companion object { val msg = "照片已保存: ${savedUri.lastPathSegment}" Log.d(TAG, msg) - // 验证文件是否真的存在 - try { - val cursor = contentResolver.query(savedUri, null, null, null, null) - if (cursor != null && cursor.moveToFirst()) { - Log.d(TAG, "文件验证成功: ${savedUri}") - // 添加到列表并显示预览 - capturedImageUris.add(savedUri) - showPhotoPreview(savedUri) - - // 如果已经有4张照片,显示合成按钮 - if (capturedImageUris.size >= 4) { - showComposeButton() - } - + // 根据当前模式决定后续处理 + when (captureMode) { + MODE_PHOTO -> { + // 普通模式:直接添加到预览 runOnUiThread { Toast.makeText(baseContext, "照片已保存", Toast.LENGTH_SHORT).show() + showPhotoPreview(savedUri) } - } else { - Log.w(TAG, "文件验证失败,但onImageSaved被调用: ${savedUri}") + } + MODE_WATERMARK -> { + // 水印模式:添加水印后再显示 + addWatermarkAndSave(savedUri) + } + MODE_COMPOSE -> { + // 合成模式:添加到合成列表 runOnUiThread { - Toast.makeText(baseContext, "照片可能未保存", Toast.LENGTH_SHORT).show() + Toast.makeText(baseContext, "图片已添加到合成列表", Toast.LENGTH_SHORT).show() + showPhotoPreview(savedUri) + capturedImageUris.add(savedUri) + + // 如果已经有4张照片,显示合成按钮 + if (capturedImageUris.size >= 4) { + showComposeButton() + } } } - cursor?.close() - } catch (e: Exception) { - Log.e(TAG, "文件验证异常: ${e.message}") - // 即使验证失败,也尝试添加到列表 - capturedImageUris.add(savedUri) - showPhotoPreview(savedUri) - - // 如果已经有4张照片,显示合成按钮 - if (capturedImageUris.size >= 4) { - showComposeButton() - } - - runOnUiThread { - Toast.makeText(baseContext, "照片已保存", Toast.LENGTH_SHORT).show() - } } } else { Log.w(TAG, "onImageSaved被调用但savedUri为null") @@ -298,18 +285,6 @@ companion object { if (cursor != null && cursor.moveToFirst()) { val displayName = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME)) Log.d(TAG, "图片捕获失败但文件已存在: $displayName") - // 获取最新保存的文件URI - val latestUri = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media._ID)) - val latestUriObj = Uri.parse("${MediaStore.Images.Media.EXTERNAL_CONTENT_URI}/$latestUri") - // 添加到列表并显示预览 - capturedImageUris.add(latestUriObj) - showPhotoPreview(latestUriObj) - - // 如果已经有4张照片,显示合成按钮 - if (capturedImageUris.size >= 4) { - showComposeButton() - } - runOnUiThread { Toast.makeText(baseContext, "图片已保存: $displayName", Toast.LENGTH_LONG).show() } @@ -349,18 +324,6 @@ companion object { // 检查是否在最近几秒内保存了文件 if (Math.abs(currentTime - dateAdded) <= 5) { Log.d(TAG, "processing错误但图片已保存: $displayName") - // 获取最新保存的文件URI - val latestUri = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media._ID)) - val latestUriObj = Uri.parse("${MediaStore.Images.Media.EXTERNAL_CONTENT_URI}/$latestUri") - // 添加到列表并显示预览 - capturedImageUris.add(latestUriObj) - showPhotoPreview(latestUriObj) - - // 如果已经有4张照片,显示合成按钮 - if (capturedImageUris.size >= 4) { - showComposeButton() - } - runOnUiThread { Toast.makeText(baseContext, "图片已保存: $displayName", Toast.LENGTH_LONG).show() } @@ -397,6 +360,8 @@ companion object { } } ) + } + private fun addWatermarkAndSave(originalUri: Uri) { try { // 读取原始图片 @@ -500,8 +465,6 @@ companion object { return mutableBitmap } - - } private fun createOutputFileOptions(): ImageCapture.OutputFileOptions { val timestamp = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date()) @@ -622,30 +585,6 @@ companion object { } } - private fun addWatermarkToBitmap(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 = 32f - typeface = Typeface.DEFAULT_BOLD - setShadowLayer(5f, 0f, 0f, Color.BLACK) - } - - val textWidth = paint.measureText(timestamp) - val textHeight = paint.descent() - paint.ascent() - - val x = 20f - val y = mutableBitmap.height - textHeight - 20f - - canvas.drawText(timestamp, x, y, paint) - - return mutableBitmap - } - private fun openSettings() { // 打开设置页面 val settingsFragment = SettingsFragment()