我有一个wcf服务和Windows窗体。我能够将图像转换为二进制文件并将其以varbinary(MAX)数据类型存储到SQL服务器中的EmpTable中。我使用linq和实体数据模型访问表。现在,我尝试在表单上的DataGridView上显示EmpTable,我注意到它在列上显示“ System.byte []”。因此,当我尝试将其转换回图像时,它失败了。现在,我不知道如何获取数据并将其转换回图像。我所有的linq命令都在我的服务中,我正在Winforms中使用它。我该怎么办?
答案 0 :(得分:0)
您可以使用MemorySrteam
将byte[]
转换为图像:
var bytes = getBytes(); // get bytes from db
Image img;
using (MemoryStream ms = new MemoryStream(bytes))
{
img = Image.FromStream(ms);
}
要将图像保存到DataGrid,请将图像列设置为DataGridViewImageColumn
:
DataGridViewImageColumn imgGrd = new DataGridViewImageColumn();
imgGrd.Image = img;
答案 1 :(得分:0)
此处是将byte[]
转换为BitmapImage
的函数。
/// <summary>
/// Convert byte[] to bitmapimage
/// </summary>
/// <param name="array"></param>
/// <returns></returns>
public static BitmapImage byteArrayToImage(byte[] array)
{
if (array != null)
{
using (var ms = new MemoryStream(array))
{
var image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = ms;
image.EndInit();
return image;
}
}
return null;
}