WPF - 我能在WPF中使用System.Drawing吗?

8

我正在将图片保存在数据库中。但是如何从数据库中检索该图片?当我尝试使用system.drawing时,它会显示错误。有些人说我不能在WPF中使用system.drawing,甚至不能使用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);

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

参数无效。


我相信你可以在你的WPF项目中托管它。那应该是没问题的。但为什么不充分利用WPF的功能呢? - Jeff Mercado
我使用了system.drawing.dll,现在我可以使用system.drawing.bitmap,但是在使用后,它会在System.Drawing.Image.FromStream(strm)处显示错误。 - omkar patade
1
如果您不告诉我们错误信息,我们将无法为您提供帮助。 - Foole
2个回答

15

您可以使用 System.Drawing 命名空间中的类,但需要通过右键单击项目并选择“添加引用...”选项来添加包含您感兴趣的类的程序集的引用。


谢谢,伙计。但是它仍然显示一个错误在 System.Drawing.Image.FromStream(strm);。 - omkar patade

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 Forms和WPF类和元素更可取(正如Jeff Mercado所指出的那样)。


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