代码之家  ›  专栏  ›  技术社区  ›  JYelton Melchior Blausand

如何处理将字节数组转换为图像时的错误?

  •  2
  • JYelton Melchior Blausand  · 技术社区  · 14 年前

    这是.NET4.0中的一个C#Winforms应用程序。

    我从web服务器接收到一个字节数组,它应该是JPG图像。我将此数组转换为图像,如下所示:

    // byte[] ImageData ...
    bool ValidImage = false;
    try
    {
        MemoryStream ms = new MemoryStream(ImageData);
        Bitmap FinalImage = new Bitmap(ms);
        ValidImage = true;
    }
    catch (ArgumentException)
    {
        ImageStatus = "Invalid";
    }
    if (ValidImage) // do stuff...
    

    TryParse 方法,因为我理解使用异常捕获来处理逻辑是不理想的。

    编辑:

    // byte[] ImageData ...
    bool ValidImage = false;
    try
    {
        if (ImageData[0] == 0xFF && ImageData[1] == 0xD8)
        {
            MemoryStream ms = new MemoryStream(ImageData);
            Bitmap FinalImage = new Bitmap(ms);
            ValidImage = true;
        }
    }
    catch (ArgumentException)
    {
        ImageStatus = "Invalid";
    }
    if (ValidImage) // do stuff...
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   Community Keith    4 年前

    您至少可以检查第一个字节来验证报头。

    字节3-4:像素宽度

    字节5-6:像素高度

    至于使用异常来处理错误,我认为这不应该是个问题。你只是在处理特定的错误,而且是有原因的。

        2
  •  1
  •   Judah Gabriel Himango    14 年前

    你不能,至少没有一些重要的工作。根本没有位图.TryParse.

    您可以查看字节数据的头,看看它是否像JPG。但即使这样也有可能收到垃圾。

    我建议坚持你目前的做法。

        3
  •  0
  •   pauljwilliams    14 年前

    你的代码看起来不错。你假设字节是一个有效的图像,所以如果它们不是那么情况是真正的'例外'。。。