如何从数据库中读取byte[]并将其转换为图像?

4

我有一个返回varbinary(max)类型数据的存储过程。我想把这个数据转换成图片。

但是我在以下这一行代码遇到了问题:

public Image CargarAvatar(string login)
        {
            System.Object[] Args = new System.Object[1];
            Args[0] = login;

            DataTable X = new DataTable();
            X = TraerDataTable("sp_CargarAvatarUsuario", Args);

            byte[] ImagemByte = Convert.to (X.Rows[0][0].ToString());


            MemoryStream ms = new MemoryStream();
            Image returnImage = Image.FromStream(ms);
            return returnImage;
        }

Please help! :D

4个回答

13

varbinary字段以字节数组形式返回,因此您只需要将其转换:

byte[] ImagemByte = (byte[])X.Rows[0][0];

然后使用该数组创建内存流:

MemoryStream ms = new MemoryStream(ImagemByte);

经过不懈的努力,我所要做的就是将字节数组传递到流中。+1! - Harry

0
你正在尝试从一个空的内存流中创建图像。请将字节数组作为参数传递给MemoryStream构造函数:
MemoryStream ms = new MemoryStream(ImagemByte);

0
我对在这种情况下将Int转换为byte[]不确定,因为我没有看到任何int。当然可以这样做,只是我在这种情况下没有看到应用。
你有两个真正的问题。一个是创建byte[],显然你知道它无法编译。第二个问题是将这些字节传送到流中。
public Image CargarAvatar(string login)
{
    System.Object[] Args = new System.Object[1];
    Args[0] = login;

    DataTable X = TraerDataTable("sp_CargarAvatarUsuario", Args); // No need to create a new DataTable and overwrite it with the return value of TraerDataTable. One assignment will do.

    byte[] ImagemByte = (byte[])X.Rows[0][0]; // If this is an Image in the database, then this is already a byte[] here and just needs to be casted like so.             

    MemoryStream ms = new MemoryStream(ImagemByte); // You need to pass the existing byte[] into the constructor of the stream so that it goes against the correct data
    Image returnImage = Image.FromStream(ms);

    return returnImage;
}

0

这是用于将图像转换为字节数组的代码,可以将其作为数据插入到数据库中:

public byte[] imageToByteArray(BitmapImage myimage)
    {
        MemoryStream ms = new MemoryStream();
        WriteableBitmap wb = new WriteableBitmap(myimage);
        wb.SaveJpeg(ms, myimage.PixelWidth, myimage.PixelHeight, 0, 100);
        byte[] imageBytes = ms.ToArray();
        return imageBytes;
    }

这是用于返回的代码:

public static BitmapImage ByteArraytoBitmap(Byte[] byteArray)
    {
        MemoryStream stream = new MemoryStream(byteArray);
        BitmapImage bitmapImage = new BitmapImage();
        bitmapImage.SetSource(stream);
        return bitmapImage;
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接