【问题标题】:Error" Parameter is not valid " while converting Bytes into Image将字节转换为图像时出现错误“参数无效”
【发布时间】:2013-07-14 02:51:20
【问题描述】:

我正在将字节转换为图像,但出现错误

参数无效

我正在粘贴我的代码。请检查代码并建议我做的是对还是错。

Image arr1 = byteArrayToImage(Bytess);

这是函数。

public static Image byteArrayToImage(byte[] byteArrayIn)
{
        if (null == byteArrayIn || byteArrayIn.Length == 0)
            return null;

        MemoryStream ms = new MemoryStream(byteArrayIn);
        try
          {
            Process currentProcess1 = Process.GetCurrentProcess();
            Image returnImage = Image.FromStream(ms);
            return returnImage;
          }
        catch (Exception ex)
          {
            MessageBox.Show(ex.Message);
          }
    }

我应用了许多技术和解决方案,但对我不起作用

您的回答将不胜感激。

谢谢

【问题讨论】:

  • 我编辑了它。 oOption.SelectedFile 有一个字节
  • 我看到了...删除了我原来的评论...那么究竟是哪一行引发了错误?此外, currentProcess1 似乎没有用于任何事情(作为旁注)。
  • 图像 returnImage = Image.FromStream(ms);此行给出参数无效的错误
  • 字节数组可能不是有效图像(无法转换,因此 Image.FromStream 失败)。
  • 是的,它必须是 Image.FromStream 工作的公认图像格式。如果您尝试转换 pdf,则必须以另一种方式进行。看看这个问题:stackoverflow.com/questions/6712557/…

标签: c# .net image bytearray memorystream


【解决方案1】:
cmd.CommandText="SELECT * FROM `form_backimg` WHERE ACTIVE=1";

MySqlDataReader reader6= cmd.ExecuteReader();

if(reader6.Read())
{
   code4 = (byte[])reader6["BACK_IMG"];   //BLOB FIELD NAME BACK_IMG
}
reader6.Close();

MemoryStream stream = new MemoryStream(code4);   //code4 is a public byte[] defined on top                             
pictureBox3.Image = Image.FromStream(stream);

【讨论】:

    【解决方案2】:

    试试这个

    public Image byteArrayToImage(byte[] byteArrayIn)
    {
        System.Drawing.ImageConverter converter = new System.Drawing.ImageConverter();
        Image img = (Image)converter.ConvertFrom(byteArrayIn);
    
        return img;
    }
    

    【讨论】:

    • 不,它不起作用。我的字节是 1120135
    • like this byte[] array = { 68, 111, 116, 32, 78, 101, 116, 32, 80, 101, 114, 108, 115 };
    • 实际上我的字节是从对话框生成的,所以我怎么写在这里,首先我从对话框中选择图像,然后将图像字节传递给这个方法
    • 天哪。这救了我。我已经花了几个小时处理旧的parameter is not valid 异常。我使用的是Image.FromStream 方法:stackoverflow.com/questions/457370/…
    【解决方案3】:

    在我的情况下,我收到了错误,因为我的 base64 字符串在调用 Image.FromStream 之前编码错误。 这最终对我有用:

    byte[] bytes = System.Convert.FromBase64String(base64ImageString);
    
    using (MemoryStream ms = new MemoryStream(bytes))
    {
        var image = Image.FromStream(ms);
        image.Save(filePath, System.Drawing.Imaging.ImageFormat.Png);
    }
    

    【讨论】:

      【解决方案4】:

      问题在于,您从数据库中错误地获取了它。尝试像这样更改您的代码:

      while (registry.Read())
      {
         byte[] image = (byte[])registry["Image"];
      }
      

      【讨论】:

        【解决方案5】:

        在尝试了很多事情之后,我找到了一种控制能力更强的方法。 在此示例中,您可以指定像素格式并将字节复制到位图。

        byte[] buffer = GetImageBytes();
        var bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb);
        var bitmap_data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
        Marshal.Copy(buffer, 0, bitmap_data.Scan0, buffer.Length);
        bitmap.UnlockBits(bitmap_data);
        var result = bitmap as Image;
        

        【讨论】:

          【解决方案6】:

          试试这个,

          public Image byteArrayToImage(byte[] byteArrayIn)
          {
               Image returnImage = null;
               using (MemoryStream ms = new MemoryStream(byteArrayIn))    
               {   
                   returnImage = Image.FromStream(ms);     
               }
               return returnImage;
          }
          

          【讨论】:

          • 您好 Umair,我认为您的 byte[] 值格式不正确。想一想,为了检查将一张图像转换为字节[],然后将此字节值传递给上面的编码。如果它正在转换正确的图像意味着你的字节值有问题。让我们知道..
          • 从 S3 下载图像时遇到同样的问题。但是,在上传之前(使用表单提交之后)使用文件时,它可以正常工作。还是想不通
          猜你喜欢
          • 2018-08-10
          • 1970-01-01
          • 2012-02-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多