【问题标题】:Convert Image into byte array in Xamarin.Forms在 Xamarin.Forms 中将图像转换为字节数组
【发布时间】:2016-03-01 01:13:32
【问题描述】:

我需要传递一个像字节数组这样的图像 (Image _thresholdedImage)...我不知道我该怎么做。任何想法?谢谢!

_thresholdedImage.Source = ImageSource.FromStream (() => photo.Source);

var tessResult = await _tesseractApi.SetImage(imageBytes);

【问题讨论】:

标签: c# xamarin xamarin.forms


【解决方案1】:

我无法在 X.Forms 中转换它,而是将以下代码与依赖服务一起使用。谢谢大家。

    public async Task<byte[]> GetBytesFromImage(string filePath)
    {
        ConvertImageToBW(filePath);

        // Create another bitmap that will hold the results of the filter.
        Bitmap thresholdedBitmap = Bitmap.CreateBitmap (BitmapFactory.DecodeFile(filePath));

        thresholdedBitmap = BitmapFactory.DecodeFile (thresholdedImagePath);

        byte[] bitmapData;
        using (var stream = new MemoryStream())
        {
            thresholdedBitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
            bitmapData = stream.ToArray();
        }

        return bitmapData;
    }

【讨论】:

  • 我的 xamarin.forms 不知道位图。我应该包括一些特别的东西吗?我做错了什么?
  • @Gulzar 在每个平台上创建您的本地实现。
【解决方案2】:

您是否尝试过使用转换器?

 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        ImageSource retSource = null;
        if (value != null)
        {
            byte[] imageAsBytes = (byte[])value;
            retSource = ImageSource.FromStream(() => new MemoryStream(imageAsBytes));
        }
        return retSource;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

【讨论】:

    【解决方案3】:

    事实证明,您可以将 MediaFile 对象转换为字节数组。因此无需将文件转换为ImageSourceImage

    var photo = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions() { });
    
    byte[] imageArray = null;
    
    using (MemoryStream memory = new MemoryStream()) {
    
        Stream stream = photo.GetStream();
        stream.CopyTo(memory);
        imageArray = memory.ToArray();
    }
    

    来源:https://forums.xamarin.com/discussion/156236/how-to-get-the-bytes-from-the-imagesource-in-xamarin-forms
    在 Xamarin 论坛中向用户“ajaxer”大喊大叫,在这个问题上花了 3 天后,他们的解决方案救了我。 ?

    【讨论】:

      【解决方案4】:

      您可能正在使用以下功能:

        public async Task<byte[]> Download(string url)
              {
                  using (HttpClient client = new HttpClient())
                  {
                      byte[] fileArray = await client.GetByteArrayAsync(url);
                      return fileArray;
                  }
      
              }
      

      【讨论】:

      • 欢迎来到 Stack Overflow!虽然这段代码可能会回答这个问题,但最好包括对问题的描述,以及您的代码将如何解决给定的问题。对于未来,这里有一些信息,how to crack a awesome answer 在 Stack Overflow 上。
      【解决方案5】:

      通过在 xamairn 表单中使用 Java.Io,我们可以从 imagePath 获取字节数组。 它适用于所有平台。

      private static byte[] GetBytesFromImage(string imagePath)
              {
                  var imgFile = new File(imagePath);
                  var stream = new FileInputStream(imgFile);
                  var bytes = new byte[imgFile.Length()];
                  stream.Read(bytes);
                  return bytes;
              }
      

      【讨论】:

        【解决方案6】:
        byte[] bitmapData;
        using (var stm = new MemoryStream())
        {
            snapshot.Compress(Bitmap.CompressFormat.Png, 0, stm);
            bitmapData = stm.ToArray();
        }
        

        【讨论】:

          【解决方案7】:

          以下代码可用于将图像转换为字节数组。此处CrossMedia插件用于从相机捕获图像。

          public byte[] imageByte;
          Stream imageStream = null; 
          var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
                 { Name = "pic.jpg"});
          if (file == null) return;
          imageStream = file.GetStream();
          BinaryReader br = new BinaryReader(imageStream);
          imageByte = br.ReadBytes((int)imageStream.Length);
          

          【讨论】:

          • 别忘了usingusing (var br = new BinaryReader(stream))
          猜你喜欢
          • 1970-01-01
          • 2015-08-16
          • 2013-05-19
          • 1970-01-01
          • 2016-11-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多