数组转换字节时,图像的ArgumentException是未处理的错误数组、字节、图像、错误

2023-09-03 07:14:00 作者:故人难舍

我已经做了这一个,在这条线将阵列的字节的一列在GridView控件System.Drawing.Image对象得到了一个错误

 图片returnImage = Image.FromStream(MS);

              ArgumentException的是未处理
              参数无效。
 

和code是这样

 专用字节[] objtoarray(obj对象)
{
    如果(OBJ == NULL)
        返回null;

    BinaryFormatter的BF =新的BinaryFormatter();
    MemoryStream的毫秒=新的MemoryStream();
    bf.Serialize(MS,OBJ);

    返回ms.ToArray();

}

公众形象bytearraytoimage(byte []的字节组)
{
    MemoryStream的毫秒=新的MemoryStream(字节数组,0,bytearray.Length);

    图像returnImage = Image.FromStream(毫秒);
    返回returnImage;

}

私人无效productGridview_Cellclick(对象发件人,DataGridViewCellEventArgs E)
{
    byte []的位= NULL;
    图片IMG = NULL;

    如果(e.ColumnIndex = productgridview.Columns [productimage]指数!)回报;

    如果(productgridview.SelectedCells.Count == 0)收益;

    反对了selectedValue = productgridview.SelectedCells [0] .value的;
    位= objtoarray(了selectedValue);
    的img = bytearraytoimage(比特);

    如果(IMG为图片)
    {
        //表单是IDisposable的,所以用它们嵌入在using语句。
        使用(ProductDescriptionForm PF =新ProductDescriptionForm())
        {
            pf.picture =(图片)了selectedValue;
            pf.ShowDialog(本);
        }
    }
}
 

解决方案

在文档状态的ArgumentException可提高为:

 流不具备有效的图像格式
-要么-
流为空。
 
转换到字节集工具界面预览 转换到字节集工具界面图片

所以,因为 objtoarray 可以返回空值,是 productgridview.SelectedCells [0] .value的 null,或者一个无效值?

 对象了selectedValue = productgridview.SelectedCells [0] .value的;
    位= objtoarray(了selectedValue);
 

I have done this one for converting the byte of array in one of the columns in gridview to system.drawing.image got an error at this line

Image returnImage = Image.FromStream(ms);        

              argumentexception was unhandled 
              Parameter is not valid.

and the code is like this

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);
        }
    }      
}

解决方案

The docs state that ArgumentException can be raise for :

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

So since objtoarray can return null, is productgridview.SelectedCells[0].Value null, or of an invalid value?

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

 
精彩推荐
图片推荐