gpt4 book ai didi

xamarin.forms - ImageSource 到 byte[] 是否有跨平台解决方案?

转载 作者:行者123 更新时间:2023-12-03 23:52:11 25 4
gpt4 key购买 nike

我做了研究,发现了这个解决方案:http://forums.xamarin.com/discussion/22682/is-there-a-way-to-turn-an-imagesource-into-a-byte-array

初始问题:http://forums.xamarin.com/discussion/29569/is-there-a-cross-platform-solution-to-imagesource-to-byte#latest

我们想通过 HTTP Post 上传图像,这是我们尝试过的:

HttpClient httpClient = new HttpClient ();
byte[] TargetImageByte = **TargetImageSource**; //How to convert it to a byte[]?
HttpContent httpContent = new ByteArrayContent (TargetImageByte);
httpClient.PostAsync ("https://api.magikweb.ca/debug/file.php", httpContent);

我们也很难处理必须包含在 using 子句中的库。好像 using System.IO;有效,但它不能让我们访问像 FileInfo 这样的类或 FileStream .

除了自定义平台特定的转换器之外,有人知道如何做到这一点吗?
可能是 Xamarin.Forms.ImageSource 函数 toByte()?

让我知道您是否需要更多信息。
TargetImageSourceXamarin.Forms.ImageSource .
ImageSource TargetImageSource = null;
解决方案 (斯坦是对的)
ImageSource必须源自另一种类型才能存在,以前的类型可以转换为 byte[] .在这种情况下,我使用 Xamarin.Forms.Labs 拍照并返回 MediaFile其中一个 FileStream可通过 Source 访问属性(property)。
//--Upload image
//Initialization
HttpClient httpClient = new HttpClient ();
MultipartFormDataContent formContent = new MultipartFormDataContent ();
//Convert the Stream into byte[]
byte[] TargetImageByte = ReadFully(mediaFile.Source);
HttpContent httpContent = new ByteArrayContent (TargetImageByte);
formContent.Add (httpContent, "image", "image.jpg");
//Send it!
await httpClient.PostAsync ("https://api.magikweb.ca/xxx.php", formContent);

App.RootPage.NavigateTo (new ClaimHistoryPage());

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

最佳答案

我认为你在看它有点倒退。
ImageSource是一种为 Xamarin.Forms.Image 提供源图像以显示某些内容的方法。如果您已经在屏幕上显示了您的 Image View 填充了来自其他地方的数据,例如文件或资源,或者存储在内存中的数组中……或者无论如何你首先得到了这些。而不是试图从 ImageSource 取回该数据您可以保留对它的引用并根据需要上传。

如果您认为此解决方案不适用于您的情况,也许您可​​以详细说明您的特定需求。

伪代码:

ShowImage(){
ImageSource imageSource = ImageSource.FromFile("image.png"); // read an image file
xf_Image.Source = imageSource; // show it in your UI
}

UploadImage(){
byte[] data = File.ReadAll("image.png");
// rather than
// byte[] data = SomeMagicalMethod(xf_Image.Source);
HttpClient.Post(url, data);
}

更新:

由于您正在拍照,您可以复制 MediaFile.Source流到内存流中,然后您可以将内存流的位置重置为指向流的开头,以便您可以再次读取它并将其复制到 http 正文。

或者,您可以存储 MediaFile.Source到文件并使用 ImageSource.FromFile在 UI 中加载它,并在必要时 - 您可以将文件的内容复制到 http 帖子正文中。

关于xamarin.forms - ImageSource 到 byte[] 是否有跨平台解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27532462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com