如何在Swift中将KotlinByteArray转换为NSData

wn9m85ua  于 2023-08-07  发布在  Kotlin
关注(0)|答案(1)|浏览(140)

我有一个字符串形式的KotlinByteArray,我想将它转换为NS Data,以便在Swift中加载图像。谁能帮我做这个。我在Swift中使用KMM框架,它返回图像的KotlinByteArray,我想将其转换为NS Data来加载图像,或者至少我需要一种使用KotlinByteArray加载图像的方法

fxnxkyjh

fxnxkyjh1#

如果您只想显示图像,可以通过将byteArray转换为NSData来实现
shared模块内部创建一个expect fun,返回一个ImageBitmap

@Composable
expect fun rememberImageFromBytes(bytes:ByteArray) : ImageBitmap?

字符串

androidMain

@Composable 
actual fun rememberImageFromBytes(bytes : ByteArray) : ImageBitmap? {
   return remember(bytes){
        if(bytes != null){
        BitmapFactory.decodeByteArray(bytes,0,bytes.size).asImageBitmap()
       }else{
         null
     }

iosMain

@Composable 
actual fun rememberImageFromBytes(bytes : ByteArray) : ImageBitmap? {
   return remember(bytes){
        if(bytes != null){
          Bitmap.makeFromImage(
              Image.makeFromEncoded(bytes)
          ).asComposeImageBitmap()
       }else{
         null
   }


只有在您的项目中启用了撰写多平台插件时,这才有效。
如果你想将byteArray转换为NSData,你可以使用:

private val fileManager = NSFileManager.defaultManager
private val documentDirectory = NSSearchPathForDirectoriesInDomains(
         directory = NSDocumentDirectory,
         domainMask = NSUserDomainMask,
         expandTilde = true
   ).first as NSString

actual suspend fun saveImage(filename : String,bytes : ByteArray) : String {
    val path = documentDirectory.stringByAppendingPathComponent(filename)
    val data = bytes.usePinned {
            NSData.create(
                 bytes = it.addressOf(0),
                 length = bytes.size.toULong()
              )
     }
  data.writeFile(path = path,atomically = true)

相关问题