首页 > 解决方案 > ImageSource 如何将字节返回给应用程序

问题描述

我想实现我自己的ImageSource. Xamarin Forms 有FileImageSourceUriImageSource的其他几个子类ImageSource,但没有一个能满足我的需求。

要了解如何实现ImageSource子类,我查看了FileImageSourcegithub 上的实现(https://github.com/xamarin/Xamarin.Forms/blob/5.0.0/Xamarin.Forms.Core/FileImageSource.cs

我希望发现子类会覆盖一个或多个ImageSource方法来实际读取图像文件并将文件中的字节提供给调用平台。但是 FileImageSource 的源代码中没有这样的东西!事实上,他们只使用 File 来覆盖ImageSource.IsEmpty. 怎么会这样?如果图像包含在文件中,则需要读取文件才能显示该图像,不是吗?

我错过了什么?如果我想实现自己的 ImageSource 子类,我的子类如何将图像数据返回到平台?

编辑 感谢所有提出以不同方式解决问题并询问为什么现有 ImageSource 子类不能满足我的需求的人。

即使有不同的方法来解决我的直接问题,从教育的角度来看,了解 Xamarin Forms 如何在不读取文件的情况下显示图像文件仍然很有趣。FileImageSource 的源代码很短,除了实现 IsEmpty 外,似乎没有使用该文件。这会困扰我,直到我知道它是如何工作的。

标签: xamarinxamarin.forms

解决方案


[使用转换器解决问题]

您可以创建一个转换器(如果您正在使用绑定),而不是创建一个新的 ImageSource 。

因此,如果您有类似字节数组的东西,并且希望将其显示为图像,则可以将字节数组转换为StreamImageSource

[编辑:知道它是如何工作的]

如果你想知道它是如何在内部工作的,以及它是如何将 File 转换为实际的 Image 的,你将不得不更深入地研究代码,并检查平台实现。例如,这里有 android 渲染器。你会发现 IImageSourceHandler.cs 和 FontImageSourceHandler 和 FileImageSourceHandler 等等。


推荐阅读