【问题标题】:Convert 'Xamarin.Form.Image' type 'byte[]'转换 'Xamarin.Form.Image' 类型 'byte[]'
【发布时间】:2015-03-18 13:02:07
【问题描述】:

我应该从 url 获取图像并将其转换为 byte[]。以下是我取得的成果

var webImage = new Image { Aspect = Aspect.AspectFit };
webImage.Source = ImageSource.FromUri(new    Uri("http://xamarin.com/content/images/pages/forms/example-app.png"));

但现在我无法将 Image 类型转换为 byte[]

这是正确的方法吗?任何形式的帮助将不胜感激。

【问题讨论】:

  • 它不是重复的,你指出重复的问题只是 iOS
  • @Rohit 正确,但您必须在每个平台上执行此操作。
  • 那么一个好的方法应该是在表单项目中创建一个接口并在每个平台中实现它。

标签: c# xamarin.ios xamarin xamarin.android xamarin.forms


【解决方案1】:

我还没有尝试过,但从我最初的想法来看,你需要一个 Stream。 为此,您可以使用StreamImageSource

从那里您可以使用来自this 的代码。

【讨论】:

  • public static byte[] ReadStreamIntoByte (Stream input) { using (MemoryStream ms = new MemoryStream()) { input.CopyTo(ms);返回 ms.ToArray(); } } 不适用于 StreamImageSource 作为输入参数。
【解决方案2】:

其中的 Xamarin.Forms 使用 IImageSourceHandler,其实现如下

  • ImageLoaderSourceHandler - 用于 UriImageSource
  • StreamImagesourceHandler - 用于 StreamImageSource
  • 等等

要从UriImageSource 读取数据,您应该使用平台类ImageLoaderSourceHandler。所以在每个平台下使用类似的代码

var handler = new ImageLoaderSourceHandler();
var uiimage = await handler.LoadImageAsync(source, new CancellationToken(), UIScreen.MainScreenScale);

然后您可以从 iOS 下的 UIImage 或 Android 下的 Bitmap 获取任何数据。有很多教程如何从中获取 byte[]。

【讨论】:

    【解决方案3】:

    FFImageLoading (https://github.com/molinch/FFImageLoading/) CachedImageGetImageAsJPGGetImageAsPNG 方法。它是直接的 Xamarin.Forms Image 类替换,具有许多附加功能。

    这是用于图像检索的代码(可以在Image 类自定义渲染器中使用):

    【讨论】:

    • 您提供的解决方案是问题的解决方案吗?我也想知道它是否仍在开发中,因为我无法构建解决方案。 "FFImageLoading.Transformations.Windows" 与 uap10.0" 或 "wpa81" 等不兼容。
    【解决方案4】:

    可以使用 WebClient 从 URL 中获取字节数组。

    var webClient = new WebClient ();
    byte[] byteImage = webClient.DownloadData (imageURL);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-20
      • 2014-09-01
      • 2012-01-10
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      相关资源
      最近更新 更多