Skip to content

Commit ebb6051

Browse files
- Try to limit the image size taken by the camera in ask image task
1 parent 61ee4fd commit ebb6051

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

Android/src/app/src/main/java/com/google/ai/edge/gallery/ui/common/chat/MessageInputText.kt

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import android.graphics.BitmapFactory
2424
import android.graphics.Matrix
2525
import android.net.Uri
2626
import android.util.Log
27+
import android.util.Size
2728
import androidx.activity.compose.rememberLauncherForActivityResult
2829
import androidx.activity.result.PickVisualMediaRequest
2930
import androidx.activity.result.contract.ActivityResultContracts
@@ -32,6 +33,9 @@ import androidx.camera.core.CameraControl
3233
import androidx.camera.core.CameraSelector
3334
import androidx.camera.core.ImageCapture
3435
import androidx.camera.core.ImageProxy
36+
import androidx.camera.core.resolutionselector.AspectRatioStrategy
37+
import androidx.camera.core.resolutionselector.ResolutionSelector
38+
import androidx.camera.core.resolutionselector.ResolutionStrategy
3539
import androidx.camera.lifecycle.ProcessCameraProvider
3640
import androidx.camera.lifecycle.awaitInstance
3741
import androidx.camera.view.PreviewView
@@ -404,7 +408,20 @@ fun MessageInputText(
404408

405409
val lifecycleOwner = LocalLifecycleOwner.current
406410
val previewUseCase = remember { androidx.camera.core.Preview.Builder().build() }
407-
val imageCaptureUseCase = remember { ImageCapture.Builder().build() }
411+
val imageCaptureUseCase = remember {
412+
// Try to limit the image size.
413+
val preferredSize = Size(512, 512)
414+
val resolutionStrategy = ResolutionStrategy(
415+
preferredSize,
416+
ResolutionStrategy.FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER
417+
)
418+
val resolutionSelector = ResolutionSelector.Builder()
419+
.setResolutionStrategy(resolutionStrategy)
420+
.setAspectRatioStrategy(AspectRatioStrategy.RATIO_4_3_FALLBACK_AUTO_STRATEGY)
421+
.build()
422+
423+
ImageCapture.Builder().setResolutionSelector(resolutionSelector).build()
424+
}
408425
var cameraProvider by remember { mutableStateOf<ProcessCameraProvider?>(null) }
409426
var cameraControl by remember { mutableStateOf<CameraControl?>(null) }
410427
val localContext = LocalContext.current
@@ -501,6 +518,7 @@ fun MessageInputText(
501518
val matrix = Matrix().apply {
502519
postRotate(rotation.toFloat())
503520
}
521+
Log.d(TAG, "image size: ${bitmap.width}, ${bitmap.height}")
504522
Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true)
505523
} else bitmap
506524
updatePickedImages(bitmap)
@@ -590,7 +608,7 @@ private fun rotateImageIfNecessary(bitmap: Bitmap, rotateForPortrait: Boolean =
590608

591609
private fun checkFrontCamera(context: Context, callback: (Boolean) -> Unit) {
592610
val cameraProviderFuture = ProcessCameraProvider.getInstance(context)
593-
cameraProviderFuture.addListener(Runnable {
611+
cameraProviderFuture.addListener({
594612
val cameraProvider = cameraProviderFuture.get()
595613
try {
596614
// Attempt to select the default front camera

0 commit comments

Comments
 (0)