【问题标题】:How to load image in Kotlin Compose desktop?如何在 Kotlin Compose 桌面中加载图像?
【发布时间】:2021-02-20 19:55:39
【问题描述】:

在桌面使用 Kotlin compose 时如何从硬盘加载图片?

【问题讨论】:

  • 我正在尝试弄清楚如何从 url 加载...

标签: kotlin android-jetpack-compose compose-desktop


【解决方案1】:

你可以通过这个函数获取ImageAsset

fun imageFromFile(file: File): ImageAsset {
    return org.jetbrains.skija.Image.makeFromEncoded(file.readBytes()).asImageAsset()
}

完整示例:

import androidx.compose.desktop.Window
import androidx.compose.foundation.Image
import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.ImageAsset
import androidx.compose.ui.graphics.asImageAsset
import java.io.File

fun main() = Window {
   val file = File("D:\\images\\my_image.PNG")
   val image = remember { imageFromFile(file) }

   Image(asset = image)
}

fun imageFromFile(file: File): ImageAsset {
   return org.jetbrains.skija.Image.makeFromEncoded(file.readBytes()).asImageAsset()
}

【讨论】:

    【解决方案2】:

    这对我有用。

     Image(bitmap = imageFromResource("image.png"),
           "image",
     )
    

    contentDescription 是必需的,但可以是任何你想要的。您还可以添加修饰符,例如

    val imageModifier = Modifier
       .height(240.dp)
       .fillMaxWidth()
       .clip(RoundedCornerShape(12.dp))
    
    Image(bitmap = imageFromResource("header.png"),
          "image",
          imageModifier,
          contentScale = ContentScale.Fit
        )
    

    【讨论】:

      【解决方案3】:

      其他答案已过时,根据 Compose 1.0.0-beta5,您应该执行以下操作:

      Image(painterResource("image.jpg"))

      如果你只想加载位图

      val bitmap = useResource("image.jpg") { loadImageBitmap(it) }

      只需要文件名(不是完整路径),但请确保您的资源在src/main/resources/image.jpg

      【讨论】:

        【解决方案4】:

        试试这个:

        import androidx.compose.ui.graphics.ImageBitmap
        import androidx.compose.ui.graphics.painter.BitmapPainter
        import androidx.compose.ui.res.loadImageBitmap
        import java.io.File
        
        
        val file = File(path)
        val imageBitmap: ImageBitmap = remember(file) {
            loadImageBitmap(file.inputStream())
        }
        
        Image(
            painter = BitmapPainter(image = imageBitmap),
            contentDescription = null
        )
        

        【讨论】:

          猜你喜欢
          • 2021-05-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-08
          • 2013-09-05
          • 2021-11-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多