Skip to content

Commit 8733d2f

Browse files
Merge branch 'master' into fixed-aspect-ratio
2 parents ba80310 + 28a3506 commit 8733d2f

File tree

3 files changed

+51
-11
lines changed

3 files changed

+51
-11
lines changed

cropper/src/main/java/com/smarttoolfactory/cropper/ImageCropper.kt

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,8 @@ fun ImageCropper(
142142
cropState.cropRect,
143143
cropOutline,
144144
onCropStart,
145-
onCropSuccess
145+
onCropSuccess,
146+
cropProperties.requiredSize
146147
)
147148

148149
val imageModifier = Modifier
@@ -303,7 +304,8 @@ private fun Crop(
303304
cropRect: Rect,
304305
cropOutline: CropOutline,
305306
onCropStart: () -> Unit,
306-
onCropSuccess: (ImageBitmap) -> Unit
307+
onCropSuccess: (ImageBitmap) -> Unit,
308+
requiredSize: IntSize?,
307309
) {
308310

309311
val density = LocalDensity.current
@@ -315,15 +317,24 @@ private fun Crop(
315317
LaunchedEffect(crop) {
316318
if (crop) {
317319
flow {
318-
emit(
319-
cropAgent.crop(
320-
scaledImageBitmap,
321-
cropRect,
322-
cropOutline,
323-
layoutDirection,
324-
density
325-
)
320+
val croppedImageBitmap = cropAgent.crop(
321+
scaledImageBitmap,
322+
cropRect,
323+
cropOutline,
324+
layoutDirection,
325+
density
326326
)
327+
if (requiredSize != null) {
328+
emit(
329+
cropAgent.resize(
330+
croppedImageBitmap,
331+
requiredSize.width,
332+
requiredSize.height,
333+
)
334+
)
335+
} else {
336+
emit(croppedImageBitmap)
337+
}
327338
}
328339
.flowOn(Dispatchers.Default)
329340
.onStart {

cropper/src/main/java/com/smarttoolfactory/cropper/crop/CropAgent.kt

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,17 @@ package com.smarttoolfactory.cropper.crop
33
import android.graphics.Bitmap
44
import androidx.compose.ui.geometry.Offset
55
import androidx.compose.ui.geometry.Rect
6-
import androidx.compose.ui.graphics.*
6+
import androidx.compose.ui.graphics.BlendMode
7+
import androidx.compose.ui.graphics.Canvas
8+
import androidx.compose.ui.graphics.ImageBitmap
9+
import androidx.compose.ui.graphics.Paint
10+
import androidx.compose.ui.graphics.Path
11+
import androidx.compose.ui.graphics.addOutline
12+
import androidx.compose.ui.graphics.asAndroidBitmap
13+
import androidx.compose.ui.graphics.asAndroidPath
14+
import androidx.compose.ui.graphics.asImageBitmap
15+
import androidx.compose.ui.graphics.nativeCanvas
16+
import androidx.compose.ui.graphics.toComposeRect
717
import androidx.compose.ui.unit.Density
818
import androidx.compose.ui.unit.LayoutDirection
919
import com.smarttoolfactory.cropper.model.CropImageMask
@@ -138,5 +148,20 @@ class CropAgent {
138148
}
139149
}
140150
}
151+
152+
fun resize(
153+
croppedImageBitmap: ImageBitmap,
154+
requiredWidth: Int,
155+
requiredHeight: Int
156+
): ImageBitmap {
157+
val resizedBitmap: Bitmap = Bitmap.createScaledBitmap(
158+
croppedImageBitmap.asAndroidBitmap(),
159+
requiredWidth,
160+
requiredHeight,
161+
true
162+
)
163+
164+
return resizedBitmap.asImageBitmap()
165+
}
141166
}
142167

cropper/src/main/java/com/smarttoolfactory/cropper/settings/CropDefaults.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.compose.ui.Modifier
55
import androidx.compose.ui.graphics.Color
66
import androidx.compose.ui.layout.ContentScale
77
import androidx.compose.ui.unit.Dp
8+
import androidx.compose.ui.unit.IntSize
89
import androidx.compose.ui.unit.dp
910
import com.smarttoolfactory.cropper.ImageCropper
1011
import com.smarttoolfactory.cropper.crop
@@ -38,6 +39,7 @@ object CropDefaults {
3839
zoomable: Boolean = true,
3940
rotatable: Boolean = false,
4041
fixedAspectRatio: Boolean = false,
42+
requiredSize: IntSize? = null
4143
): CropProperties {
4244
return CropProperties(
4345
cropType = cropType,
@@ -52,6 +54,7 @@ object CropDefaults {
5254
zoomable = zoomable,
5355
rotatable = rotatable,
5456
fixedAspectRatio = fixedAspectRatio,
57+
requiredSize = requiredSize
5558
)
5659
}
5760

@@ -97,6 +100,7 @@ data class CropProperties internal constructor(
97100
val zoomable: Boolean,
98101
val maxZoom: Float,
99102
val fixedAspectRatio: Boolean = false,
103+
val requiredSize: IntSize? = null
100104
)
101105

102106
/**

0 commit comments

Comments
 (0)