• WPF引用LottieSharp加载json动画,json里有image就无效,请大家看看


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 fenshijishu 2024-04-01 20:48 采纳率: 0% 浏览 5 首页/ 微软技术 / WPF引用LottieSharp加载json动画,json里有image就无效,请大家看看 wpf WPF引用LottieSharp加载json动画,json里有image就无效,请大家看看前: 后: LottieAnimationVie1w.PlayAnimation(); 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    2条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-01 20:48
      关注

      引自免费微信小程序:皆我百晓生

      非常抱歉,这个问题与LottieSharp有关,但是关于XAML文件的结构以及在XAML文件中使用资源的问题,这是一个相对复杂的主题,涉及到了编程和设计的知识,所以需要更深入的理解才能提供有效的解答。

      首先,你需要确保你的WPF项目已经正确地设置了XAML文件的扩展名。例如,如果你想要导入一个JSON文件,并且这个JSON文件中有图片,你需要将JSON文件的扩展名修改为".json"。

      然后,在你的XAML文件中,你需要通过标签来引入资源。你需要指定资源的路径(通常情况下是文件所在位置的绝对路径)和名称。如果资源的位置在项目的根目录下,你需要将其路径设置为根目录的URL。

      至于你提到的“LottieSharp加载json动画,json里有image就无效”,这可能是由于JSON文件中的数据格式不正确或者是网络连接出现问题导致的。你可以尝试检查JSON文件的格式,确保其符合LottieSharp的标准。同时,也可以检查你的网络连接,确保没有网络问题。

      在回答时,我会尽量给出详细的代码示例,解释如何使用WPF来调用LottieSharp来加载JSON文件,并处理可能出现的错误情况。同时,我也会根据你的具体需求,提供一些可能的解决方法和建议。

      再次感谢你的提问,如果有任何其他问题或疑虑,欢迎随时向我提出。

      评论 编辑记录
    • GISer Liu 2024-04-01 21:01
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      根据您的描述,问题可能是由于LottieSharp在WPF中无法正确加载JSON文件中引用的图片导致的。解决这个问题的思路是手动加载JSON文件,替换其中的图片路径为正确的本地路径,然后再使用LottieAnimationView加载处理过的JSON文件。下面是详细的解决方案:

      1. 加载JSON文件: 首先,您需要手动加载JSON文件,并将其转换为LottieComposition对象。您可以使用LottieComposition.Factory.FromJsonString方法来实现。示例代码如下:
        csharpCopy code
        string jsonString = File.ReadAllText("1711974578926.json");
        var composition = LottieComposition.Factory.FromJsonString(jsonString, "1711974578926");
        
      2. 替换图片路径: 遍历composition.Images中的每个图片对象,将其路径替换为正确的本地路径。例如,假设您的图片路径在JSON文件中以images/开头,您可以将其替换为您项目中图片的实际路径。示例代码如下:
        csharpCopy code
        foreach (var image in composition.Images)
        {
        image.Value.SetAssetDelegate((_) =>
        {
        var bitmapImage = new BitmapImage(new Uri("path/to/your/local/image.jpg"));
        return new ImageAsset(bitmapImage);
        });
        }
        
      3. 使用LottieAnimationView加载动画: 最后,您可以使用LottieAnimationView加载处理过的composition对象,如下所示:
        csharpCopy code
        LottieAnimationView lottieView = new LottieAnimationView();
        lottieView.Animation = composition;
        lottieView.PlayAnimation();
        
        请确保替换图片路径时使用正确的本地路径,并根据您的实际情况调整代码。希望这可以帮助您解决问题!

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      评论
      fenshijishu 2024-04-01 21:11

      {"v":"5.8.1","fr":25,"ip":0,"op":99,"w":500,"h":500,"nm":"预合成 1","ddd":0,"assets":[{"id":"image_0","w":620,"h":189,"u":"","p":"data:image/png;base64,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
      这是json文件,里面有image base64

      回复
      GISer Liu 2024-04-02 14:27

      根据您描述的问题,您需要在 WPF 中使用 LottieSharp 加载包含 base64 图片的 JSON
      文件,并播放动画。我会根据您提供的要求和代码片段给出解决方案。

      1. 加载 JSON 文件并替换 base64 图片:
      • 首先,您需要将 JSON 文件加载到内存中,然后找到其中的 base64 图片并解码成图片对象。
      • 您可以使用 Newtonsoft.Json 库加载 JSON 文件,并使用 System.Drawing.Image 类解码 base64 图片。示例代码如下:
        csharpCopy code
        using Newtonsoft.Json.Linq;
        using System.Drawing;
        using System.IO;
        string json = File.ReadAllText("1711974578926.json");
        JObject jsonObj = JObject.Parse(json);
        foreach (var token in jsonObj.SelectTokens("..['p']"))
        {
        if (token.Type == JTokenType.String && ((string)token).StartsWith("data:image"))
        {
        string base64String = ((string)token).Split(',')[1];
        byte[] bytes = Convert.FromBase64String(base64String);
        using (MemoryStream ms = new MemoryStream(bytes))
        {
        Image image = Image.FromStream(ms);
        // 这里可以对图片进行进一步处理,例如保存到本地或者替换 JSON 中的图片路径
        }
        }
        }
        
      1. 替换 JSON 中的图片路径:
      • 您可以将 base64 图片解码后保存到本地,并替换 JSON 中的图片路径为本地路径。这里假设您将图片保存到本地,并将路径替换为本地路径。示例代码如下:
        csharpCopy code
        string imagePath = "path/to/save/image.jpg";
        image.Save(imagePath, ImageFormat.Jpeg);
        token.Replace(imagePath);
        
      1. 播放动画:
      • 最后,您可以使用 LottieSharp 库加载处理过的 JSON 文件,并播放动画。示例代码如下:
        csharpCopy code
        LottieAnimationView lottieView = new LottieAnimationView();
        lottieView.SetAnimation("1711974578926.json");
        lottieView.PlayAnimation();
        
        请根据您的具体需求和情况调整以上代码,并确保替换图片路径时使用正确的本地路径。希望以上解决方案对您有帮助!

      回复
      fenshijishu 回复 GISer Liu 2024-04-06 22:46

      按这样写代码还是一样的效果,播放不了动画(和直接使用Lottie是一样的效果),我感觉 wpf不支持json里有image的情况,我试下uwp可以播放,不过还是感谢你们的解答

      回复
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    zabbix配置钉钉报警
    MFC Windows 程序设计[337]之历史下拉列表框(附源码)
    vue 项目的屏幕自适应方案
    flarum 论坛 User Statistics插件修改
    初探flask debug生成pin码
    算法:JavaScript语言描述
    使用百度EasyDL实现厂区工人抽烟行为识别
    变量与运算符
    移动的迷宫
    还记得高中生物书上的莫斯密码吗?利用Python破解摩斯密码的代码示例!
  • 原文地址:https://ask.csdn.net/questions/8082463