7

我将图像保存在数据库中。..但是如何从数据库中检索该图像..当我尝试使用system.drawing ..它显示一个错误..一些人说我不能在wpf中使用system.drwaing ..甚至没有dll文件..

我的代码是

private void btnShow_Click(object sender, RoutedEventArgs e)
{
       DataTable dt2 =  reqBll.SelectImage().Tables[0];
       byte[] data = (byte[])dt2.Rows[0][1];
       MemoryStream strm = new MemoryStream();
       strm.Write(data, 0, data.Length);
       strm.Position = 0;
       System.Drawing.Image img = System.Drawing.Image.FromStream(strm);
       BitmapImage bi = new BitmapImage();
       bi.BeginInit();
       MemoryStream ms = new MemoryStream();
       img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
       ms.Seek(0, SeekOrigin.Begin);
       bi.StreamSource = ms;
       bi.EndInit();
       ImgBox.Source = bi;
    }

现在做什么?

我使用了 system.drawing.dll .. 现在我可以使用 system.drawing.bitmap .. 但使用后在 System.Drawing.Image.FromStream(strm); 处显示错误

错误:- 用户代码未处理参数异常

参数无效。

4

2 回答 2

15

可以使用System.Drawing命名空间中的类,但您必须添加对包含您感兴趣的类的程序集的引用,方法是右键单击项目并选择“添加引用...”选项

于 2012-05-19T06:58:44.320 回答
0

就绘图部分而言,您的代码很好,问题可能出在您尝试从数据库加载的图像数据上(可能是由于数据格式不匹配或选择了错误的列等)。您可能希望共享将图像保存到数据库的代码,因为没有它就无法知道。

此代码示例执行您想要的操作(我注释掉了与数据库相关的部分并用文件加载替换了它):

private void btnShow_Click(object sender, RoutedEventArgs e)
{
  // DataTable dt2 = reqBll.SelectImage().Tables[0];
  // byte[] data = (byte[]) dt2.Rows[0][1];
  // MemoryStream strm = new MemoryStream();
  // strm.Write(data, 0, data.Length);

  System.Drawing.Image bmp = System.Drawing.Bitmap.FromFile(@"C:\Temp\test.png");
  MemoryStream strm = new MemoryStream();
  bmp.Save(strm, System.Drawing.Imaging.ImageFormat.Bmp);

  strm.Position = 0;
  System.Drawing.Image img = System.Drawing.Image.FromStream(strm);
  BitmapImage bi = new BitmapImage();
  bi.BeginInit();
  MemoryStream ms = new MemoryStream();
  img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);

  ms.Seek(0, SeekOrigin.Begin);
  bi.StreamSource = ms;
  bi.EndInit();
  imgBox.Source = bi;
}

话虽如此,如果这是一个新应用程序,则单独使用 WPF 优于混合 Windows 窗体和 WPF 类和元素(正如 Jeff Mercado 指出的那样)。

于 2012-05-19T07:29:19.177 回答