【发布时间】:2014-12-04 02:41:04
【问题描述】:
我正在尝试将我的 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;
}
我的网络服务是用 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");
}
}
但是,由于网络服务方面的原因,我无法做到这一点。我已经对其进行了调试,似乎问题出在 Image.FromStream() 函数上。
我在传递参数方面绝对没有任何问题。我认为无论是语言冲突还是将图像转换为字节,反之亦然,都可能导致问题。有没有人有任何想法或发现有问题?
我非常愿意提供任何帮助。
谢谢。
【问题讨论】:
-
我不确定这是否是原因,但 java 的
byte是有符号的(范围 -128 到 127),而 C# 的byte是无符号的(范围是 0 到 255)。如果您想让 C# 的字节匹配 java 的,请改用sbyte(尽管这可能不是您的选择)。 -
@Pokechu22:两种语言的类型不同,但字节就是字节。在 Java 中表示(例如)-128 的相同位模式在 C# 中表示 128,但每个平台上的 JPEG 解码器将相同地解释该位模式。两种语言都不会对字节进行任何实际转换;唯一的区别是数学和文字在每种语言中的工作方式。
标签: c# android asp.net bytearray memorystream