我一直在努力实现这个实现几个小时,似乎无论在哪里都找不到任何解决方案(SO,Xamarin论坛,Google等)...
在这个当前场景中,我在.Droid.Resources.Drawable
中有一些图像,我希望从我的共享代码中访问并转换为byte[]
。这是因为我希望在我设置为服务器端点的REST API上测试 CRUD 功能的完整范围。
图片在应用程序中显示得很好,但出于某些原因,我似乎无法在将这些图像转换为Xamarin中的byte[]
的过程中扭曲。我在“正常” C# ...
很抱歉,如果代码有点乱,但我相信你明白了。
.Droid
存储中获取图像(稍后将移植到iOS)byte[]
byte[]
表示发送到我的API。在代码的当前状态中,我收到此错误:
C#:无法创建抽象类的实例
我正在尝试创建新流(new Stream(sauce)
)
以下示例基于找到here的摘要,并且完全归功于Sten和Vincent。
/*
* Takes an arbitrary string as a token, updates a record with dummy data and a placeholder_image.
*/
public async Task<string> PostUpdateFoundation(string arbitrary, Image img)
{
ImageSource sauce = ImageSource.FromFile("abc.png");
byte[] byte_img = FromStreamToByte(new Stream(sauce)); //error occurs here
Debug.WriteLine("I'm in!");
var client = new System.Net.Http.HttpClient();
client.DefaultRequestHeaders.Add("Accept", "application/json");
var content = new StringContent(arbitrary);
var response = await client.PostAsync(String.Format("http://some.api.to.test.com?s={0}&img={1}", arbitrary, byte_img), content);
var result = response.Content.ReadAsStringAsync().Result;
return result;
}
/*
* Attempts to convert an stream (based on image source) into a byte[].
*/
public static byte[] FromStreamToByte (Stream input)
{
using (MemoryStream ms = new MemoryStream())
{
input.CopyTo(ms);
return ms.ToArray();
}
}
答案 0 :(得分:0)
尝试使用Plugin.Media
byte BImageSource = ReadFully(file.GetStream());
var bytes = new byte[file.GetStream().Length]; //file is from the plugin and contains your image
file.GetStream().Position = 0;
file.GetStream().Read(bytes, 0, (int)file.GetStream().Length);
BImageSource = ReadFully(file.GetStream()); //BImageSource is your resource in bytes
byte[] ReadFully(Stream input)
{
using (MemoryStream ms = new MemoryStream())
{
input.CopyTo(ms);
return ms.ToArray();
}
}
希望这有帮助!