4

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

4

4 回答 4

6

您可以使用此功能获取 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()
}
于 2020-11-08T20:00:33.953 回答
5

这对我有用。

 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
    )
于 2021-02-25T18:04:18.147 回答
3

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

Image(painterResource("image.jpg"))

如果您只想加载位图

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

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

于 2021-11-14T03:53:14.223 回答
0

试试这个:

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
)
于 2022-01-02T20:37:07.320 回答