001*_*014 2 c# asp.net arrays android memorystream
我正在尝试将 Android 设备上的 .jpg 文件发送到我的服务器计算机。
为此,我通过 java android 应用程序将图片转换为字节数组,并将其作为参数发送到我的服务器计算机。我通过网络服务调用来完成此操作。
编辑第一个函数:
public static byte[] ImageConvertion(){
File inputFile = new File("/storage/emulated/0/IFSpictures/icon-si_strapclamp.jpg");
byte[] data;
try{
FileInputStream input = new FileInputStream(inputFile);
ByteArrayOutputStream output = new ByteArrayOutputStream ();
byte[] buffer = new byte[65535];
int l;
while ((l = input.read(buffer)) > 0)
output.write (buffer, 0, l);
input.close();
output.close();
data = output.toByteArray();
return data;
} catch (IOException e) {
System.err.println(e);
data=null;
}
return data;
}
Run Code Online (Sandbox Code Playgroud)
我的网络服务是用 ASP.NET (C#) 语言编写的,并且有一个函数将字节数组作为参数并将其转换回服务器计算机上的图像。
[WebMethod]
public void ByteArrayToPicture(byte[] imageData)
{
using (var ms = new MemoryStream(imageData))
{
Image image = Image.FromStream(ms);
image.Save(@"C:\newImage.jpg");
}
}
Run Code Online (Sandbox Code Playgroud)
但是,由于网络服务方面的原因,我无法做到这一点。我已经对其进行了调试,看来问题是由于 Image.FromStream() 函数造成的。
我在传递参数方面绝对没有任何问题。我认为语言冲突或图像到字节的转换(反之亦然)可能会导致问题。有人有任何想法或看到错误吗?
我非常需要任何帮助。
谢谢。
抱歉我的问题不完整,但是我想为尝试做同样事情的人提供一些提示。
如果有人试图将图像发送到服务器并且双方都有不同的平台,那么不要将图像转换为字节数组!
原因是,在我的例子中,Java 上转换为字节数组的图像与 C# 上的字节数组不同。因此,根据我的研究,不可能在服务器端收集图像。在 Java 上创建的字节数组在 C# 上不具有正确的格式。
因此,任何人都希望将数据从一种语言传输到另一种语言,请使用 Base64 编码。将图像一侧转换为 Base64 字符串,并将其作为字符串发送到另一种语言。由于 Base64 格式在每种语言上都是相同的,因此复制它不会有任何问题。
我用以下代码解决了这个问题:
Bitmap ourbitmap = BitmapFactory.decodeStream(imageStream, null, options);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ourbitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
test = Base64.encodeToString(b, Base64.DEFAULT);
Run Code Online (Sandbox Code Playgroud)
这是我获取图像并将其转换为 Java android 应用程序上的 Base64 字符串的代码,
byte[] imageBytes = Convert.FromBase64String(Base64ImageData);
MemoryStream ms = new MemoryStream(imageBytes, 0,
imageBytes.Length);
ms.Write(imageBytes, 0, imageBytes.Length);
Image image = Image.FromStream(ms, true);
image.Save(@"D:\tmpImage.jpg");
Run Code Online (Sandbox Code Playgroud)
上面的代码采用 Base64 类型字符串并将其转换回图像。这是用 C# 编写的。