byte[] b = fc.getPhoto(pk);
if (b.Length > 0)
{
       MemoryStream stream = new MemoryStream(b,true);
       stream.Write(b, 0, b.Length);
       Bitmap image = new Bitmap(stream);-----运行时抱错(参数无效)
       stream.Close();
       picturebox.Image = image;
}
fc.getPhoto(pk);从数据库取出对应的图片并转换成byte[]
我在网上看了一些方法都是这么写的,不知道是什么原因,请指点下。

解决方案 »

  1.   

    Bitmap image =System.Drawing.Bitmap.FromStream(stream);
      

  2.   

    byte[] buffByte = null;
    ...
    cmd.CommandText = "select IMAGE from YOUR_TABLE"; //IMAGE为存储图像的字段
    OracleDataReader rd = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    while (rd.Read())
    {
          buffByte = ((byte[])rd[0]);
    }
    System.IO.MemoryStream ms = new System.IO.MemoryStream(buffByte);
    Bitmap bmp = new Bitmap(ms);不就行了吗?
      

  3.   

    对了,
    cmd.CommandText = "select IMAGE from YOUR_TABLE"; 应为类似
    cmd.CommandText = "select IMAGE from YOUR_TABLE where PK_COL=PK_VALUE"; 
    也就是定位一行一列。
      

  4.   

    数据库中操作图片
    How To Read and Write BLOB Data by Using ADO.NET with Visual C# .NET
    http://support.microsoft.com/default.aspx?scid=kb;EN-US;309158
    DataGrid显示图片(物理路径式和Stream流式)和添加图片到数据库
    http://singlepine.cnblogs.com/articles/288027.html
      

  5.   

    可以将图片转化为64位二字符串处理,
    /// <summary>
    /// 图像到64为字符
    /// </summary>
    /// <param name="image"></param>
    /// <returns></returns>
    private string ImageToBase64String(System.Drawing.Image image)
    {
    if (image==null)
    {
    return "" ;
    }
    try
    {
    MemoryStream ms=new MemoryStream(); if (image.RawFormat.Guid == ImageFormat.Icon.Guid)
    {
    Icon icon = Icon.FromHandle(((Bitmap)image).GetHicon());
    icon.Save(ms);
    }
    else
    {
    image.Save (ms,image.RawFormat );
    } byte[] img = ms.ToArray();

    return Convert.ToBase64String(img,0,img.Length);
    }
    catch
    {
    return "";
    }
    }
    /// <summary>
    /// 字符到图像
    /// </summary>
    /// <param name="data"></param>
    /// <returns></returns>
    private System.Drawing.Image Base64StringToImage(string data) 
    {
    if (data == "") 
    {
    return null;
    }
    try
    {
    byte[] img = Convert.FromBase64String(data);
    MemoryStream ms = new MemoryStream(img);
    System.Drawing.Image  image = System.Drawing.Image.FromStream(ms);
    return image;
    }
    catch
    {
    return null;
    }
    }