【问题标题】:Xamarin Forms Android - Display .ico Image - Error: could not find any valid embedded ico codecsXamarin Forms Android - 显示 .ico 图像 - 错误:找不到任何有效的嵌入式 ico 编解码器
【发布时间】:2019-02-28 18:23:12
【问题描述】:

我正在尝试使用其 favicon.ico 文件显示与网站相关的图标。

在某些设备上这可以正常工作,但在其他设备上我在控制台中收到以下错误并且图像显示为空白:

错误:找不到任何有效的嵌入式 ico 编解码器。

有没有办法包含额外的编解码器,或者任何人都可以建议一种方法来将它转换为 Xamarin 表单中的 PNG?

【问题讨论】:

  • 我不确定是否支持.ico's
  • 如果你开发的不是专注于图像格式转换的应用,建议服务器处理图像转换。客户不建议将显示限制为一种格式。目前在 Xamarin 中使用的最佳格式是 PNGJPG 格式。

标签: xamarin.forms xamarin.android


【解决方案1】:

找到了一个名为 SkiaSharp 的有用图像 API,用于在 Xamarin Forms 中在 .ico 和 .png 之间进行转换:

文档:

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/ https://docs.microsoft.com/en-us/dotnet/api/skiasharp?view=skiasharp-1.68.0

Nuget:

https://www.nuget.org/packages/SkiaSharp

示例:

var iconUri = new Uri(this.URI + "/favicon.ico");
using (var webClient = new System.Net.WebClient())
{
    var imageBytes = webClient.DownloadData(iconUri);                           

    using (var bmp = SkiaSharp.SKBitmap.Decode(imageBytes))
    {
        using (var img = SkiaSharp.SKImage.FromBitmap(bmp))
        {                                    
            using (var imgData = img.Encode())
            {
                using (var ms = new System.IO.MemoryStream())
                {
                    imgData.SaveTo(ms);
                    imageBytes = ms.ToArray();
                }
            }
        }
    }    

    this.Icon = ImageSource.FromStream(() => new System.IO.MemoryStream(imageBytes));
}

注意:我打算稍后通过解析 HTML 以找到 <link rel="shortcut icon" 标记来进行改进以获取 favicon

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    相关资源
    最近更新 更多