【问题标题】:Error with converting an image to byte array将图像转换为字节数组时出错
【发布时间】:2019-06-24 16:23:25
【问题描述】:

我有一个脚本试图将图像转换为字节数组,但无法让它输出数组。

使用

Console.WriteLine(bytearray);

我只是得到一个输出

System.Byte[]

尝试时

return bytearray; 我得到了错误

    'Program.Main(string[])' returns void, a return keyword must not be 
    followed by an object expression
byte[] bytearray;
using (MemoryStream ms = new MemoryStream())
{
    img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    bytearray = ms.ToArray();
    Console.WriteLine (bytearray);
}

我想要将图像输出到控制台的字节数组。任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 请注意,链接的可能重复项中接受的答案是将包含某种编码的字符代码点的字节数组转换为文本,因此不适合手头的问题。
  • 这段代码有两个问题。产生错误的原因是您尝试在void 方法中使用return bytearray。第二个是你试图打印一个字节数组而不指定 如何 这样做

标签: c# arrays system.drawing


【解决方案1】:

Console.WriteLinestring 输出到控制台。但参数可以是任何对象,而不仅仅是字符串。因此,如果参数是其他类型(如字节数组),那么它会调用对象的ToString() 方法并将其写出。这总是有效的,因为一切都继承自 object,因此每个对象都有一个 ToString() 方法。

但通常情况下,ToString() 方法不会被覆盖。所以它只是执行object.ToString(),它返回对象类型的名称。

这就是为什么如果你这样做:

var byteArray = new byte[] { };
Console.WriteLine(byteArray);

你明白了:

System.Byte[]

您可能希望查看单个值,但 ToString() 不会返回该值。它只返回类型的名称。因此,如果您想实际输出每个字节的值,则必须明确地执行此操作:

foreach(var b in byteArray) 
    Console.WriteLine(b);

现在你没有打电话给WriteLine(object)。您正在调用WriteLine(int)(因为byte 可以隐式转换为int)。 int 可以表示为string,所以现在它知道如何将值写入控制台了。


只是为了好玩,为了说明这个概念,你可以写一个这样的类:

public class MyBytes : List<byte>
{
    public override string ToString()
    {
        return "These are my bytes:" 
               + Environment.NewLine 
               + string.Join(Environment.NewLine, this);
    }
}

它继承自 List&lt;Byte&gt; 并覆盖 ToString()。如果您创建MyBytes 的实例,填充它并将其写入控制台:

var byteArray = new byte[] { 1, 2, 3 };
var myBytes = new MyBytes();
myBytes.AddRange(byteArray);
Console.WriteLine(myBytes);

你会看到它调用了你重写的 ToString() 方法:

这些是我的字节:
1
2
3

这只是为了说明。有时,如果我们知道要输出一个类的字符串表示形式,覆盖ToString() 是有意义的,但我不会仅仅为了覆盖ToString() 而创建一个完整的类。

【讨论】:

  • 非常感谢,有没有什么方法可以将一个字符分隔的一行的值返回?再次感谢!
  • 当然,只需将Environment.NewLine 替换为其他内容即可。您可以根据需要构建字符串。重要的是该函数返回一个字符串。我会避免任何昂贵、缓慢的字符串连接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 2013-05-19
  • 2013-01-14
  • 2013-07-29
相关资源
最近更新 更多