-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
13 changed files
with
159 additions
and
107 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
37 changes: 37 additions & 0 deletions
37
...eApp/src/androidMain/kotlin/io/ssttkkl/mahjongutils/app/utils/image/ImageUtils.android.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package io.ssttkkl.mahjongutils.app.utils.image | ||
|
||
import android.graphics.Bitmap | ||
import android.graphics.Canvas | ||
import android.graphics.Paint | ||
import androidx.compose.ui.graphics.Color | ||
import androidx.compose.ui.graphics.ImageBitmap | ||
import androidx.compose.ui.graphics.asAndroidBitmap | ||
import androidx.compose.ui.graphics.asImageBitmap | ||
import androidx.compose.ui.graphics.toArgb | ||
|
||
actual suspend fun platformWithBackground( | ||
imageBitmap: ImageBitmap, | ||
background: Color | ||
): ImageBitmap { | ||
val newBitmap = | ||
Bitmap.createBitmap(imageBitmap.width, imageBitmap.height, Bitmap.Config.ARGB_8888) | ||
val canvas = Canvas(newBitmap) | ||
|
||
// 绘制背景 | ||
val paintBackground = Paint().apply { | ||
color = background.toArgb() | ||
style = Paint.Style.FILL | ||
} | ||
canvas.drawRect( | ||
0f, | ||
0f, | ||
imageBitmap.width.toFloat(), | ||
imageBitmap.height.toFloat(), | ||
paintBackground | ||
) | ||
|
||
// 绘制原始位图 | ||
canvas.drawBitmap(imageBitmap.asAndroidBitmap(), 50f, 50f, null) // 偏移位置50, 50 | ||
|
||
return newBitmap.asImageBitmap() | ||
} |
46 changes: 46 additions & 0 deletions
46
composeApp/src/androidMain/kotlin/io/ssttkkl/mahjongutils/app/utils/image/ImageUtils.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
package io.ssttkkl.mahjongutils.app.utils.image | ||
|
||
import android.content.ContentValues | ||
import android.graphics.Bitmap | ||
import android.net.Uri | ||
import android.os.Environment | ||
import android.provider.MediaStore | ||
import androidx.compose.ui.graphics.Color | ||
import androidx.compose.ui.graphics.ImageBitmap | ||
import androidx.compose.ui.graphics.asAndroidBitmap | ||
import io.ssttkkl.mahjongutils.app.MyApp | ||
import kotlinx.coroutines.Dispatchers | ||
import kotlinx.coroutines.withContext | ||
|
||
actual object ImageUtils : CommonImageUtils() { | ||
actual suspend fun save(imageBitmap: ImageBitmap, title: String): Boolean { | ||
return withContext(Dispatchers.IO) { | ||
val values = ContentValues().apply { | ||
put(MediaStore.Images.Media.DISPLAY_NAME, title) | ||
put(MediaStore.Images.Media.MIME_TYPE, "image/png") | ||
put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES) | ||
put(MediaStore.Images.Media.IS_PENDING, 1) | ||
} | ||
|
||
val uri: Uri = MyApp.current.contentResolver.insert( | ||
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, | ||
values | ||
) ?: return@withContext false | ||
|
||
uri.let { | ||
try { | ||
MyApp.current.contentResolver.openOutputStream(it)?.use { | ||
imageBitmap.asAndroidBitmap().compress(Bitmap.CompressFormat.PNG, 100, it) | ||
} ?: return@let false | ||
values.clear() | ||
values.put(MediaStore.Images.Media.IS_PENDING, 0) | ||
MyApp.current.contentResolver.update(uri, values, null, null) | ||
} catch (e: Exception) { | ||
e.printStackTrace() | ||
return@let false | ||
} | ||
} | ||
return@withContext true | ||
} | ||
} | ||
} |
41 changes: 0 additions & 41 deletions
41
composeApp/src/androidMain/kotlin/io/ssttkkl/mahjongutils/app/utils/image/SavePhotoUtils.kt
This file was deleted.
Oops, something went wrong.
41 changes: 0 additions & 41 deletions
41
...nMain/kotlin/io/ssttkkl/mahjongutils/app/components/capturablelazy/FakeLazyColumnScope.kt
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
composeApp/src/commonMain/kotlin/io/ssttkkl/mahjongutils/app/utils/image/ImageUtils.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package io.ssttkkl.mahjongutils.app.utils.image | ||
|
||
import androidx.compose.ui.graphics.Color | ||
import androidx.compose.ui.graphics.ImageBitmap | ||
|
||
expect suspend fun platformWithBackground(imageBitmap: ImageBitmap, background: Color): ImageBitmap | ||
|
||
open class CommonImageUtils { | ||
suspend fun withBackground(imageBitmap: ImageBitmap, background: Color): ImageBitmap = | ||
platformWithBackground(imageBitmap, background) | ||
} | ||
|
||
expect object ImageUtils : CommonImageUtils { | ||
suspend fun save(imageBitmap: ImageBitmap, title: String): Boolean | ||
} | ||
|
7 changes: 0 additions & 7 deletions
7
composeApp/src/commonMain/kotlin/io/ssttkkl/mahjongutils/app/utils/image/SavePhotoUtils.kt
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
40 changes: 40 additions & 0 deletions
40
...rc/nonAndroidMain/kotlin/io/ssttkkl/mahjongutils/app/utils/image/ImageUtils.nonAndroid.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
package io.ssttkkl.mahjongutils.app.utils.image | ||
|
||
import androidx.compose.ui.graphics.Color | ||
import androidx.compose.ui.graphics.ImageBitmap | ||
import androidx.compose.ui.graphics.asSkiaBitmap | ||
import androidx.compose.ui.graphics.toArgb | ||
import androidx.compose.ui.graphics.toComposeImageBitmap | ||
import org.jetbrains.skia.Image | ||
import org.jetbrains.skia.Paint | ||
import org.jetbrains.skia.Rect | ||
import org.jetbrains.skia.Surface | ||
|
||
actual suspend fun platformWithBackground( | ||
imageBitmap: ImageBitmap, | ||
background: Color | ||
): ImageBitmap { | ||
// 创建一个新的图像位图用于存放背景和原始图像 | ||
val surface = Surface.makeRasterN32Premul(imageBitmap.width, imageBitmap.height) | ||
val canvas = surface.canvas | ||
|
||
// 绘制背景 | ||
val paintBackground = Paint().apply { | ||
color = background.toArgb() | ||
} | ||
canvas.drawRect( | ||
Rect.makeLTRB( | ||
0f, | ||
0f, | ||
imageBitmap.width.toFloat(), | ||
imageBitmap.height.toFloat() | ||
), paintBackground | ||
) | ||
|
||
// 绘制原始图像 | ||
val skiaImage = Image.makeFromBitmap(imageBitmap.asSkiaBitmap()) | ||
canvas.drawImage(skiaImage, 0.0f, 0.0f) | ||
|
||
// 返回新的 ImageBitmap | ||
return surface.makeImageSnapshot().toComposeImageBitmap() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters