AndroidCompose:是否有解决painterResource不支持.webp文件的方法?矢量图像正常工作
创始人
2024-10-06 20:30:43
0

可以使用Coil库将.webp文件转换为Bitmap,然后再将其作为Painter资源加载。以下是示例代码:

// 导入 Coil 库
implementation "io.coil-kt:coil-compose:1.3.1"
import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.layout.ContentScale
import coil.compose.rememberImagePainter
import coil.transform.CircleCropTransformation
import coil.bitmap.BitmapPool
import coil.decode.*
import coil.size.Size
import okio.BufferedSource
import okio.buffer
import okio.source
import android.graphics.Bitmap
import androidx.compose.ui.res.painterResource


@Composable
fun ImageFromWebp(webpResId: Int, contentDescription: String?) {
    // 将.webp文件转换为Bitmap
    val bitmap: Bitmap = CoilImageLoader().loadBitmap(webpResId)
    // 将Bitmap转换为PainterResource
    val painter = bitmap.asImageBitmap().asAndroidPainter()
    Image(painter = painter, contentDescription = contentDescription, contentScale = ContentScale.Fit)
}



// CoilImageLoader
class CoilImageLoader: ImageLoader {
    private val coilLoader = CoilImageLoaderDelegate()

    override val defaults: Defaults = coilLoader.defaults

    override suspend fun load(
        data: Any,
        size: Size,
        options: Options
    ): LoadResult {
        return coilLoader.load(data, size, options)
    }
}


private class CoilImageLoaderDelegate {
    internal val defaults: Defaults

    init {
        // 构建 CoilImageLoader 的默认配置
        val decoder = object : Decoder {
            override fun handles(source: BufferedSource, mimeType: String?): Boolean {
                return mimeType == MIME_TYPE
            }

            override fun decode(
                pool: BitmapPool,
                source: BufferedSource,
                width: Int,
                height: Int,
                options: Options
            ): DecodeResult {
                val bitmap = WebpDecoder(pool, Bitmap.Config.ARGB_8888).decode(source).get()
                return DecodeResult(bitmap, SourceData(source =

相关内容

热门资讯

反观!pokemomo辅助软件... 反观!pokemomo辅助软件,wpk俱乐部是做什么的,一贯是真的有挂(有挂分析)一、wpk俱乐部是...
必备科技!pokermaste... 必备科技!pokermaster破解版(辅助挂)切实真的是有挂(有挂方针辅助方法)1、上手简单,内置...
专业讨论!HH平台挂(辅助挂)... 专业讨论!HH平台挂(辅助挂)总是存在有挂(存在有挂辅助软件)1、下载好脚本下载之后点击打开,先需要...
教程辅助!wepoker辅助透... 教程辅助!wepoker辅助透视软件(辅助挂)果然是有挂(存在有挂辅助插件)1、免费辅助多个强度级别...
一分钟了解!wepoker免费... 一分钟了解!wepoker免费辅助器(辅助挂)果然存在有挂(竟然有挂辅助技巧)1、该软件可以轻松地帮...
总算了解!wepoker底牌透... 总算了解!wepoker底牌透视脚本(辅助挂)竟然是有挂(确实有挂辅助攻略)1、辅助软件下载优化,底...
让我来分享经验!wpk辅助哪里... 让我来分享经验!wpk辅助哪里买(辅助挂)一贯存在有挂(证实有挂辅助技巧)1、模拟器是什么优化,俱乐...
总算明白!wejoker开挂(... 总算明白!wejoker开挂(辅助挂)真是是有挂(有挂详细辅助教程)1)有没有挂:进一步探索有辅助吗...
信息共享!pokemmo手机版... 信息共享!pokemmo手机版修改器(辅助挂)竟然存在有挂(有挂教程辅助脚本)1、下载好透视辅助下载...
玩家必备科技!wepoker有... 玩家必备科技!wepoker有辅助插件吗(辅助挂)都是存在有挂(竟然有挂辅助软件)1、免费脚本咨询教...