我可以在 wpf 中使用 System.Drawing 吗?
本文关键字:System Drawing wpf 我可以 | 更新日期: 2023-09-27 18:34:51
我正在将图像保存在数据库中......但是如何从数据库中检索该图像..当我尝试使用system.drawing..它显示错误..某些PPL说我不能在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(显示错误;
错误:- 用户代码未处理参数异常
参数无效。
您可以使用
System.Drawing
命名空间中的类,但您必须添加对包含您感兴趣的类的程序集的引用,方法是右键单击项目,然后选择"添加引用..."选择
就绘图部分而言,您的代码很好,问题可能与您尝试从数据库加载的图像数据有关(可能是由不匹配的数据格式或选择错误的列等引起的(。您可能希望共享将图像保存到数据库的代码,因为没有它就无法知道。
这个代码示例可以执行您想要的操作(我注释掉了与数据库相关的部分并将其替换为文件加载(:
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 指出的那样(。