wpf – 我可以在wpf中使用System.Drawing吗?

我将图像保存在数据库中。 ..但如何从数据库中检索该图像..当我尝试使用system.drawing ..它显示错误..一些ppl说我不能在wpf中使用system.drwa ..甚至不是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)中显示错误;

错误: – 用户代码未处理参数exception

参数无效。

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

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

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

 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指出的那样)。