我是撰写多平台的新手。我想将字节数组转换为位图。当我使用 kmp.jetbrains 创建项目并在 android studio 中打开它时,默认情况下它具有 Gradle 库: org.jetbrains.skiko:skiko-iosarm64:0.8.15 在 iosMain 中,但不适用于 androidMain 和 commonMain 。 当我想为通用和 Android 添加它时,我添加: org.jetbrains.skiko:skiko:0.8.15 但它的表现并不像我期望的那样。
这是我的 BitmapUtit.kt:
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asComposeImageBitmap
import org.jetbrains.skia.Bitmap
import org.jetbrains.skia.Image
@Composable
fun rememberBitmapFromBytes(bytes: ByteArray?): ImageBitmap? {
return remember(bytes) {
if (bytes != null) {
Bitmap.makeFromImage(Image.makeFromEncoded(bytes)).asComposeImageBitmap()
} else null
}
}
如果我把它放在 iosMain 中是可以的,但是当我把它放在 androidMain 和 commonMain 中时,asComposeImageBitmap() 是未知的并且是红色的。
当我搜索时,似乎 asComposeImageBitmap() 仅在 iosMain 模块中可用。所以我们应该定义单独的文件。
共同点主要:
@Composable
expect fun rememberBitmapFromBytes(bytes: ByteArray?):ImageBitmap?
在 iosMain 中:
@Composable
actual fun rememberBitmapFromBytes(bytes: ByteArray?): ImageBitmap? {
return remember(bytes) {
if (bytes != null) {
Bitmap.makeFromImage(Image.makeFromEncoded(bytes)).asComposeImageBitmap()
} else {
null
}
}
}
在 androidMain 中:
@Composable
actual fun rememberBitmapFromBytes(bytes: ByteArray?): ImageBitmap? {
return remember(bytes) {
if (bytes != null) {
BitmapFactory.decodeByteArray(bytes,0,bytes.size).asImageBitmap()
} else {
null
}
}
}
所以 org.jetbrains.skiko 只能在 ios 模块中使用