Convert Image into byte array in Xamarin.Forms

后端 未结 7 953
春和景丽
春和景丽 2020-12-20 21:47

I need to pass an image (Image _thresholdedImage) like byte array... I don\'t know how I can do this. Any idea? Thank you!

_thresholdedImage.Sou         


        
相关标签:
7条回答
  • 2020-12-20 21:52

    By Using Java.Io in xamairn forms we can get byte array from imagePath. It will work for all platforms.

    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;
            }
    
    0 讨论(0)
  • 2020-12-20 22:00
    byte[] bitmapData;
    using (var stm = new MemoryStream())
    {
        snapshot.Compress(Bitmap.CompressFormat.Png, 0, stm);
        bitmapData = stm.ToArray();
    }
    
    0 讨论(0)
  • 2020-12-20 22:01

    I was unable to convert it in X.Forms, instead I use the following code with a dependency service. Thank you to all.

        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;
        }
    
    0 讨论(0)
  • 2020-12-20 22:05

    You could be using the following function:

      public async Task<byte[]> Download(string url)
            {
                using (HttpClient client = new HttpClient())
                {
                    byte[] fileArray = await client.GetByteArrayAsync(url);
                    return fileArray;
                }
    
            }
    
    0 讨论(0)
  • 2020-12-20 22:06

    It turns out that you can convert the MediaFile object to a byte array. So no need to convert the file to ImageSource or Image.

    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();
    }
    

    Source: https://forums.xamarin.com/discussion/156236/how-to-get-the-bytes-from-the-imagesource-in-xamarin-forms
    Shoutout to user "ajaxer" in the Xamarin forums whose solution saved me after spending 3 days on this issue.

    0 讨论(0)
  • 2020-12-20 22:12

    Have you tried using converters?

     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();
        }
    
    0 讨论(0)
提交回复
热议问题