Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在wpf应用程序中从数据库检索图像_C#_.net_Sql Server_Wpf_Xaml - Fatal编程技术网

C# 在wpf应用程序中从数据库检索图像

C# 在wpf应用程序中从数据库检索图像,c#,.net,sql-server,wpf,xaml,C#,.net,Sql Server,Wpf,Xaml,我有一个简单的应用程序,它包含一个登录窗口和另一个名为主体的窗口。在我的SQL Server数据库中有一个tbl_用户,具有以下列: pmk\u int\u用户 name\u str\u user user\u str\u user pass\u str\u user photo\u img\u用户 键入图像 在我的主要WPF Xaml中: <Grid> <Image HorizontalAlignment="Left" Height="71" Margin

我有一个简单的应用程序,它包含一个
登录
窗口和另一个名为
主体
的窗口。在我的SQL Server数据库中有一个
tbl_用户
,具有以下列:

  • pmk\u int\u用户
  • name\u str\u user
  • user\u str\u user
  • pass\u str\u user
  • photo\u img\u用户

    键入图像
在我的主要WPF Xaml中:

<Grid>
        <Image HorizontalAlignment="Left" Height="71" Margin="10,10,0,0" VerticalAlignment="Top" Width="87" Name="Photo"/>
</Grid>
但当我单击并使用有效的用户和密码登录时,它会显示一个无效的参数。当我评论此代码时:

MemoryStream strm = new MemoryStream(_photo);
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();
p.Photo.Source = bi;
此代码仅用于打开文件对话框以选择图像:

private void btnAddFoto(object sender, RoutedEventArgs e)
        {
            OpenFileDialog _fd = new OpenFileDialog();
            byte[] dadosImagem = null;
            if (_fd.ShowDialog() == true)
            {
                try
                {
                    _fs = new FileStream(_fd.FileName, FileMode.Open, FileAccess.Read);
                    dadosImagem = new byte[_fs.Length];
                    _fs.Read(dadosImagem, 0, System.Convert.ToInt32(_fs.Length));
                    _fs.Close();

                    ImageSourceConverter imgs = new ImageSourceConverter();
                    imgPessoa.SetValue(Image.SourceProperty, imgs.ConvertFromString(_fd.FileName.ToString()));


                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro :: " + ex.Message);
                }
}
这是为了转换:

private byte[] BitmapSourceToByteArray(BitmapSource image)
        {
            using (var stream = new MemoryStream())
            {
                var encoder = new PngBitmapEncoder(); 
                encoder.Frames.Add(BitmapFrame.Create(image));
                encoder.Save(stream);
                return stream.ToArray();
            }
        }
这是从图像控件获取图像并保存在数据库中:

var foto_img_pessoa = BitmapSourceToByteArray((BitmapSource)imgPessoa.Source);
它可以工作,但我的图像不会显示在我的
Principal
窗口中。这段代码有什么问题?
我的错误消息异常是:<代码> { Stry.AgMuthExtExp:PAR } Metro IVA.LIDO.EM系统。绘图。FromStream(流,布尔使用嵌入颜色管理,布尔验证IMALDEDATA)EM系统。绘制。图像。FromStream(流)

你能逐行检查代码吗?哪一行给出了错误?我也不确定你为什么不使用从数据库获得的流初始化位图。你不需要保存位图,然后从另一行加载图像。数据库中保存了什么类型的图像?你确定它有效吗?@mageos I add I通过此方法进行图像处理o
private void btnAddPhoto(对象发送方,RoutedEventArgs e){u fs=new FileStream(_fd.FileName,FileMode.Open,FileAccess.Read);img=new byte[_fs.Length];_fs.Read(img,0,System.Convert.ToInt32(_fs.Length));_fs.Close();ImageSourceConverter imgs=new ImageSourceConverter();imgUser.SetValue(Image.SourceProperty,imgs.ConvertFromString(_fd.FileName.ToString());}}
之后,我将其二进制图像保存到数据库中;我现在的问题是如何从数据库中检索它。@mageos我的错误行是
System.Drawing.Image img=System.Drawing.Image.FromStream(strm)当我在这一行中调试的是pointas error和pass to catch(Exception ex)时,我会仔细检查数据库中的数据。我一直使用相同的方法将字节[]转换为图像。我猜数据库中的数据已损坏。你确认过照片有价值吗。查看代码,您可能也有一个typeo。尝试在MemoryStream中使用_photo而不是_photo
private byte[] BitmapSourceToByteArray(BitmapSource image)
        {
            using (var stream = new MemoryStream())
            {
                var encoder = new PngBitmapEncoder(); 
                encoder.Frames.Add(BitmapFrame.Create(image));
                encoder.Save(stream);
                return stream.ToArray();
            }
        }
var foto_img_pessoa = BitmapSourceToByteArray((BitmapSource)imgPessoa.Source);