Xamarin.Forms如何从ImageSource获取字节数组

7

我有一个svg xml,可以使用XamSVG库在我的xamarin.forms的PCL项目中将其转换为ImageSource或FileImageSource。

我想将ImageSource / FileImageSource转换为字节数组(以获取位图)。

这可能吗?


请参考以下链接:https://dev59.com/Bl4c5IYBdhLWcg3wyM0B#27532867 - Abdul Muhaymin
这个链接不是我需要的,因为我没有使用相机。我只有一个带有ImageSource的图像,我想从中获取位图(字节数组)。 - asaf
3个回答

6

ImageSource没有公开任何机制来检索原始图像源。相反,您需要手动保留对用于创建图像的原始源的引用。


我没有原始源代码 - 我有一个将SVG XML文件转换为图像文件的文件,我需要位图的字节数组... - asaf
你需要查看XamSVG库,看看它是否产生了一张可以访问的中间位图,或者修改它以产生一张中间位图。 - Jason

6
我找到了解决方案。
StreamImageSource streamImageSource  = (StreamImageSource) some image source...
System.Threading.CancellationToken cancellationToken = System.Threading.CancellationToken.None;
Task<Stream> task = streamImageSource.Stream(cancellationToken);
Stream stream = task.Result;

而“a”又是什么? - user4344677
a 是 streamImageSource。 - asaf
我刚试了一下,结果出现了这个错误:"无法将类型为 'Xamarin.Forms.FileImageSource' 的对象转换为类型 'Xamarin.Forms.StreamImageSource'。" - user4344677
9
这不是解决方案——它只适用于 ImageSource 已经是 StreamImageSource 类型的情况。它不能创建任何 ImageSource 的输出流。 - noelicus

3

另一个解决方案:

public static byte[] ReadFully(Stream input)
{
    using (MemoryStream ms = new MemoryStream())
    {
        input.CopyTo(ms);
        return ms.ToArray();
    }          
}

StreamMemoryStreamSystem.IO类。

使用方法如下:

byte[] TargetImageByte = ReadFully(_data.Source);

_data.sourceMediaFile 类型。


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