我有这张表,想从中获取数据。它包含一个我保存为 varbinary
数据类型的图像文件。我想在数据网格中显示图像作为描述。
我有以下代码用于从字节到 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)
如何修复/改进此代码?
最佳答案
这里似乎已经解决了这个问题:
Display image from database in asp mvc
但是,我会添加一种我认为对小图像有用的方法。您可以简单地将字节写入源本身中的 base64string,而不是单独的 Controller 来生成图像文件数据。
您会将图像字节输出到模型:
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)" />
关于c# - 使用 wpf C# Ado.Net 数据实体从 SQL Server 获取图像到数据网格中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33724156/