2015-11-15 54 views
2

我有这张表,并希望从中获取数据。它包含一个图像文件,我将其保存为varbinary数据类型。我想在数据网格中显示图像作为描述。从SQL Server获取图像到wpf数据网格C#Ado.Net数据实体

enter image description here

我有用于转换到varbinary(图像)和从图像到字节以下代码从字节。

public byte[] ConvertToBytes(BitmapImage bitmapImage) 
{ 
    using (var stream = new MemoryStream()) 
    { 
     var encoder = new PngBitmapEncoder(); // or some other encoder 
     encoder.Frames.Add(BitmapFrame.Create(bitmapImage)); 
     encoder.Save(stream); 
     return stream.ToArray(); 
    } 
} 

public ImageSource BytesToImage(byte[] imageData) 
{ 
    using (var ms = new MemoryStream(imageData)) 
    { 
     var image = new BitmapImage(); 
     image.BeginInit(); 
     image.CacheOption = BitmapCacheOption.OnLoad; 
     image.StreamSource = ms; 
     image.EndInit(); 

     ImageSource imgSrc = image as ImageSource; 

     return imgSrc; 
    } 
} 

从图像转换到byte[]的作品。但我不确定是否从字节转换为图像的代码工作。

我也有在LINQ查询编译错误,我从数据库中调用数据:

public List<RoomViewModel> getRooms() 
{ 
    List<RoomViewModel> getRoomsQuery; 

    using (db = new MyHotelDBContext()) 
    { 
     getRoomsQuery = (from r in db.Rooms 
         join t in db.RoomTypes on r.RoomTypeID equals t.ID 
         join f in db.Floors on r.FloorID equals f.ID 
         select new RoomViewModel 
         { 
          ID = r.ID, 
          Nr = r.Nr, 
          rType = t.Name, 
          Image = BytesToImage(r.Image as BitmapImage), 
          Description = r.Description, 
          rFloor = f.Floor1 
         }).ToList(); 
    } 
    return getRoomsQuery ?? new List<RoomViewModel>(); 
} 

哪里是这一行的问题:

Image = BytesToImage(r.Image as BitmapImage) 

如何修复/改进这个代码?

+0

替换了Image = BytesToImage(r.Image as BitmapImage)问:从图像到字节[]的(转换)起作用。但我不确定从字节到图像的(转换)代码是否有效。 A:你究竟做了什么来验证这一点?建议:直到你可以从image => database =>成功返回到可显示的图像为止,你可能不应该假设任何*“有用”......问:“编译错误”究竟是什么? ? – paulsm4

+0

您必须将字节数组传递给BytesToImage,而不是BitmapImage。所以它应该读取'BytesToImage(r.Image as byte [])''。 – Clemens

+0

请注意,您可以直接从BytesToImage返回'image'。不需要'ImageSource imgSrc = image作为ImageSource;'。 – Clemens

回答

0

这个问题似乎已经解决这里:

Display image from database in asp mvc

不过,我想补充一点,我觉得对小图像非常有用的方法。除了生成图像文件数据的特殊控制器外,您还可以简单地将字节写入源代码本身的base64string中。

你会输出的图像字节到模型:

       select new RoomViewModel 
          { 
           ID = r.ID, 
           Nr = r.Nr, 
           rType = t.Name, 
           ImageBytes = r.Image as Byte[], 
           ImageType = "image/jpg", // for example 
           Description = r.Description, 
           rFloor = f.Floor1 
          }).ToList(); 

然后呈现在网格中的适当改造的SRC字符串。例如:

<img src="data:@Model.ImageType;base64,@Convert.ToBase64String(Model.ImageBytes)" /> 
+0

不完全是我正在寻找的答案,但有帮助 – Tinaira

0

我得到了答案。我刚刚用Image = r.Image

相关问题