使用 org.jetbrains.skiko 在撰写多平台应用程序中加载图像

问题描述 投票:0回答:1

我是撰写多平台的新手。我想将字节数组转换为位图。当我使用 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() 是未知的并且是红色的。

image android-studio compose-multiplatform
1个回答
0
投票

当我搜索时,似乎 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 模块中使用

© www.soinside.com 2019 - 2024. All rights reserved.