我通过以下方式获取图像URI

val launcher = rememberLauncherForActivityResult(ActivityResultContracts.PickVisualMedia()){uri = it}

launcher.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))

我需要得到这个图像的大小 我试着用

val painter = rememberAsyncImagePainter(uri)
return painter.intrinsicSize

但这将返回未指定的大小

val options = BitmapFactory.Options()
options.inJustDecodeBounds = true
BitmapFactory.decodeFile(uri.path, options)
Log.d("MyLog", "${options.outWidth}, ${options.outHeight}")
return IntSize(options.outWidth, options.outHeight)

但它返回IntSize(0,0)

How can I get width 和 height of image?

推荐答案

要从Uri获得图像的宽度和高度,您可以使用ContentResolver打开InputStream,然后使用BitmapFactory解码尺寸.下面是一个例子:

import android.content.ContentResolver
import android.graphics.BitmapFactory
import android.net.Uri
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.io.IOException

suspend fun getImageSize(contentResolver: ContentResolver, uri: Uri): Pair<Int, Int>? {
    return withContext(Dispatchers.IO) {
        var inputStream = try {
            contentResolver.openInputStream(uri)
        } catch (e: IOException) {
            null
        }

        var options: BitmapFactory.Options? = null
        var result: Pair<Int, Int>? = null

        try {
            options = BitmapFactory.Options()
            options.inJustDecodeBounds = true
            BitmapFactory.decodeStream(inputStream, null, options)
            result = Pair(options.outWidth, options.outHeight)
        } finally {
            inputStream?.close()
        }

        result
    }
}

然后,您可以按如下方式使用此函数:

val size = getImageSize(contentResolver, uri)
if (size != null) {
    val width = size.first
    val height = size.second
    // Do something with width and height
} else {
    // Handle the case where the size couldn't be determined
}

一百零二

Android相关问答推荐

Jetpack Compose make父级图像填充高度

推断的类型是片段,但应为上下文

找不到类MultipartBody;的序列化程序

如何在Android中将以前的数据保存在复选框中?

从片段导航回来

如何防止在Android Studio中设置kotlin断点时优化变量

具有管理员权限的 Kotlin 中的多用户系统

在单元测试下断言协程未完成

ArrayList 上的 Android intent.getParcelableArrayListExtra 引发 Nullpointer 异常

从 Jetpack Compose 中的 IconButton 中删除黑色色调

安卓模拟器打不开

使用 Dagger Hilt 获取接口的所有实例

如何在 Jetpack Compose 中设置行宽等于 TextField 的宽度?

从活动共享视图模型以使用 hilt 组合函数

喷气背包组成影子奇怪的行为

Android 自动分页如何与 media3 配合使用?

将应用更改为暗模式后 Android MainActivity 数据泄漏

预览必须是顶级声明或具有默认构造函数的顶级类

Jetpack compose 绘制形状

如何使用 Kotlin 在 Android Wear(Galaxy watch 4)中继续在后台运行应用程序