Skip to content

Commit 1d233d9

Browse files
committed
Implement Outpainted / Generative Expand to Imagen Editing Sample
1 parent a665f40 commit 1d233d9

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

ai-catalog/app/src/main/res/values/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<string name="open_sample_button">Open sample</string>
1616
<string name="imagen_sample_title">Image generation with Imagen</string>
1717
<string name="imagen_sample_description">Generate images with Imagen, Google image generation model</string>
18-
<string name="imagen_editing_sample_title">Imagen Editing using Inpainting</string>
18+
<string name="imagen_editing_sample_title">Inpainting &amp; Outpainting with Imagen</string>
1919
<string name="imagen_editing_sample_description">Generate images and edit only specific areas of a generated image with Inpainting</string>
2020
<string name="magic_selfie_sample_title">Magic Selfie with Imagen and ML Kit</string>
2121
<string name="magic_selfie_sample_description">Change the background of your selfies with Imagen and the ML Kit Segmentation API</string>

ai-catalog/samples/imagen-editing/src/main/java/com/android/ai/samples/imagenediting/data/ImagenEditingDataSource.kt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,17 @@ package com.android.ai.samples.imagenediting.data
1818
import android.graphics.Bitmap
1919
import com.google.firebase.Firebase
2020
import com.google.firebase.ai.ai
21+
import com.google.firebase.ai.type.Dimensions
2122
import com.google.firebase.ai.type.GenerativeBackend
2223
import com.google.firebase.ai.type.ImagenAspectRatio
2324
import com.google.firebase.ai.type.ImagenEditMode
2425
import com.google.firebase.ai.type.ImagenEditingConfig
2526
import com.google.firebase.ai.type.ImagenGenerationConfig
2627
import com.google.firebase.ai.type.ImagenImageFormat
28+
import com.google.firebase.ai.type.ImagenMaskReference
2729
import com.google.firebase.ai.type.ImagenRawImage
2830
import com.google.firebase.ai.type.ImagenRawMask
31+
import com.google.firebase.ai.type.ImagenStyleReference
2932
import com.google.firebase.ai.type.PublicPreviewAPI
3033
import com.google.firebase.ai.type.toImagenInlineImage
3134
import javax.inject.Inject
@@ -120,4 +123,29 @@ class ImagenEditingDataSource @Inject constructor() {
120123
)
121124
return imageResponse.images.first().asBitmap()
122125
}
126+
127+
/**
128+
* Outpaints an image to the target dimensions using the Firebase Imagen API.
129+
* This function extends the original image by generating content around it
130+
* based on the provided prompt and target dimensions.
131+
*
132+
* @param sourceImage The original bitmap image to be outpainted.
133+
* @param targetDimensions The desired dimensions of the outpainted image.
134+
* @param prompt An optional text prompt to guide the outpainting process.
135+
* @return The outpainted bitmap image.
136+
*/
137+
@OptIn(PublicPreviewAPI::class)
138+
suspend fun outpaintImage(
139+
sourceImage: Bitmap,
140+
targetDimensions: Dimensions,
141+
prompt: String = "",
142+
): Bitmap {
143+
val imageResponse = editingModel.outpaintImage(
144+
image = sourceImage.toImagenInlineImage(),
145+
newDimensions = targetDimensions,
146+
prompt = prompt,
147+
)
148+
149+
return imageResponse.images.first().asBitmap()
150+
}
123151
}

ai-catalog/samples/imagen-editing/src/main/java/com/android/ai/samples/imagenediting/ui/ImagenEditingUIState.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616
package com.android.ai.samples.imagenediting.ui
1717

1818
import android.graphics.Bitmap
19+
import com.google.firebase.ai.type.Dimensions
1920

2021
sealed interface ImagenEditingUIState {
2122
data object Initial : ImagenEditingUIState
2223
data object Loading : ImagenEditingUIState
2324
data class ImageGenerated(
2425
val bitmap: Bitmap,
26+
val dimensions: Dimensions,
2527
val contentDescription: String,
2628
) : ImagenEditingUIState
2729

0 commit comments

Comments
 (0)