【问题标题】:argumentException was unhandled error when converting byte of array to image将数组字节转换为图像时,argumentException 是未处理的错误
【发布时间】:2011-08-19 05:37:13
【问题描述】:

我已经完成了这一操作,用于将 gridview 中的一列中的数组字节转换为 system.drawing.image 在这一行出现错误

Image returnImage = Image.FromStream(ms);        

              argumentexception was unhandled 
              Parameter is not valid.

代码是这样的

private byte[] objtoarray(object obj)
{         
    if (obj == null)
        return null;

    BinaryFormatter bf = new BinaryFormatter();
    MemoryStream ms = new MemoryStream();
    bf.Serialize(ms, obj);

    return ms.ToArray();

}

public Image bytearraytoimage(byte[] bytearray)
{
    MemoryStream ms = new MemoryStream(bytearray,0,bytearray.Length);

    Image returnImage = Image.FromStream(ms);
    return returnImage;

}

private void productGridview_Cellclick(object sender, DataGridViewCellEventArgs e)
{
    byte[] bits = null;
    Image img = null;

    if (e.ColumnIndex != productgridview.Columns["productimage"].Index) return;

    if (productgridview.SelectedCells.Count == 0) return;

    object selectedValue = productgridview.SelectedCells[0].Value;
    bits= objtoarray(selectedValue);
    img = bytearraytoimage(bits);

    if (img is Image)
    {
        // Forms are IDisposable, so use them embedded in a using statement.
        using (ProductDescriptionForm pf = new ProductDescriptionForm())
        {
            pf.picture = (Image)selectedValue;
            pf.ShowDialog(this);
        }
    }      
}

【问题讨论】:

    标签: c# .net image


    【解决方案1】:

    可以引发 ArgumentException 的 docs 状态:

    The stream does not have a valid image format
    -or-
    stream is null.
    

    那么既然objtoarray可以返回null,那么productgridview.SelectedCells[0].Value是null还是无效值?

        object selectedValue = productgridview.SelectedCells[0].Value;
        bits= objtoarray(selectedValue);
    

    【讨论】:

    • 图像 returnImage = Image.FromStream(ms);我已经看到 selectedValue 的值是这样的“字节 [40678]”
    • 我在这个语句中得到了值,就像这个对象 selectedValue = productgridview.SelectedCells[0].Value;在此语句之后,选定的值就像这个字节 [44899]....我做错什么了吗....
    • thanq peter 来自网格视图的数据也是数组字节,因此无需再次转换为数组字节......我犯了一个错误......现在它工作正常......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2013-05-19
    • 2013-01-14
    相关资源
    最近更新 更多