xamarin - ImageSource 如何将字节返回给应用程序
问题描述
我想实现我自己的ImageSource
. Xamarin Forms 有FileImageSource
和UriImageSource
的其他几个子类ImageSource
,但没有一个能满足我的需求。
要了解如何实现ImageSource
子类,我查看了FileImageSource
github 上的实现(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 外,似乎没有使用该文件。这会困扰我,直到我知道它是如何工作的。
解决方案
[使用转换器解决问题]
您可以创建一个转换器(如果您正在使用绑定),而不是创建一个新的 ImageSource 。
因此,如果您有类似字节数组的东西,并且希望将其显示为图像,则可以将字节数组转换为StreamImageSource
[编辑:知道它是如何工作的]
如果你想知道它是如何在内部工作的,以及它是如何将 File 转换为实际的 Image 的,你将不得不更深入地研究代码,并检查平台实现。例如,这里有 android 渲染器。你会发现 IImageSourceHandler.cs 和 FontImageSourceHandler 和 FileImageSourceHandler 等等。
推荐阅读
- asp.net - 仅在部署 Web 应用程序时引发错误
- amazon-web-services - 用于记录/监控服务器的子网
- swift - 如何使用 OpenSSL 为 PKCS7_decrypt 函数设置填充 (OAEP)
- python - 使用圆形功能时不显示负值
- javascript - 自动填表
- three.js - 为什么更大的纹理在 webgl 中渲染得更快?
- spring-boot - Dockerized Spring Boot 应用程序无法在 Heroku 上获取 JDBC 连接字符串
- android - java.lang.IllegalArgumentException:值的类型无效:android.graphics.Bitmap 类
- python - 如何在 Python 中使用 re 替换两位数字之间的字符?
- permissions - 为什么不更改 Airflow RBAC 默认用户的权限?