在Xamarin.Forms中将图像转换为字节数组

6
我需要将一张图片(Image _thresholdedImage)以字节数组的形式传递...我不知道该怎么做。你有任何想法吗?谢谢!
_thresholdedImage.Source = ImageSource.FromStream (() => photo.Source);

var tessResult = await _tesseractApi.SetImage(imageBytes);

请为 SetImage() 指定函数签名。假设 SetImage() 接受 byte[],请使用此处提供的答案:https://dev59.com/3WQm5IYBdhLWcg3wxBRg#23731642。将格式调整为函数所需的格式(例如:Bitmap)。(我只在 https://zdenop.github.io/tesseract-doc/group___advanced_a_p_i.html#gaa463622111f3b11d8fca5863709cc699 找到了 C++ 文档。) - Maximilian Gerhardt
7个回答

2

我无法在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不认识Bitmap。我需要包含一些特殊的东西吗?我做错了什么? - Gulzar
@Gulzar 在每个平台上创建您的本地实现。 - Jonathan Zúñiga

1
你尝试过使用转换器吗?
 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();
    }

1
原来可以将MediaFile对象转换为字节数组。因此不需要将文件转换为ImageSource或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();
}

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


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

0

以下代码可用于将图像转换为字节数组。这里使用了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);

别忘了加上 using 语句块:using (var br = new BinaryReader(stream)) - Nicke Manarin

0

通过在Xamarin Forms中使用Java.Io,我们可以从图像路径获取字节数组。它适用于所有平台。

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
您可以使用以下函数:
  public async Task<byte[]> Download(string url)
        {
            using (HttpClient client = new HttpClient())
            {
                byte[] fileArray = await client.GetByteArrayAsync(url);
                return fileArray;
            }

        }

1
欢迎来到 Stack Overflow!虽然这段代码能够回答问题,但最好还是包含一下问题的描述和你的代码是如何解决该问题的。未来可以参考以下链接中有关如何在 Stack Overflow 上回答问题的详细信息:如何写出优秀的答案 - dirtydanee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接