这是我在一个月内试图解决我认为是一个简单问题的第5篇帖子:写一个小位图到一个类。 我的班级:
public class Task
public byte? TaskImage { get; set; }
我在编辑后重新创建控制器中的位图,位图包含在System.Drawing中。此行将文件作为测试写入。它有效。
mybmp.Save("C:\\temp\\lot1.bmp",System.Drawing.Imaging.ImageFormat.Gif);
我认为这会把它作为.bmp放在内存流中:应该是.gif ??
MemoryStream ms = new MemoryStream();
mybmp.Save(ms, System.Drawing.Imaging.ImageFormat.bmp);
CHALLENGE 1提供内联代码转换为byte []并写入class。
Task.TaskImage =
db.SaveChanges();
稍后我通过viewmodel将数据传递给我的视图,并使用ForEach项目概念来显示图像。
CHALLENGE 2代码显示在视图表中:
<img src="data:image/gif;base64,@Convert.ToBase64String(item.TaskImage.Value)" />
此代码由贡献者提供,但会导致此错误。
Error 2 Argument 1: cannot convert from 'method group' to 'byte[]'
有人建议我问一个新问题。 我是初学者所以请明确。当我有一个有效的答案时,我会回去发布我之前帖子的答案,以帮助其他人。
答案 0 :(得分:0)
我假设您正在保存字节数组,并且您已将图像的内容设为byte[]
如果您使用MVC4
,为什么不尝试这样做?<img src="@Url.Action("GetImage", "Controller", new{id=@Model.Id})"
alt = "img" />
其中GetImage
是:
public ActionResult GetImage(int id)
{
var imageByteArray= GetImageByte(id)
return File(imageByteArray, "Image/jpg");
}
答案 1 :(得分:0)
知道了!
将写位图挑战1到byte []字段:
mybmp.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
byte[] byteArray = new byte[0];
ms.Close();
var lottoupdate = db.Lots //each task row contains the lotid to which
.Where(i => i.LotID == lotID) //it is associated. Find the LotID then
.Single(); // update the taskimage field in the lot class
byteArray = ms.ToArray();
lottoupdate.TaskImage = byteArray;
db.Entry(lottoupdate).State = EntityState.Modified;
db.SaveChanges();
lottoupdate.TaskImage = byteArray中有错误; line因为TaskImage可以为空。
public class Task
public byte? TaskImage { get; set; }
所以我删除了?因此需要数据。我现在在这个领域播种。
挑战2使用viewmodel中传递的TaskImage byte [],在视图表中显示图像:
<text> @{
string imageBase64 = Convert.ToBase64String(@item.TaskImage);
String imageSrc = string.Format("data:image/gif;base64,{0}", imageBase64);
}
</text>
<td><img src="@imageSrc" alt="Lot chart" border="0" /></td>
这会在表格行中显示图像。我需要'text'标签,因为没有它,html5不喜欢剃刀代码。请注意,我不应该测试空数据。我的程序将一个“基础”图像放入数据库。
我希望这可以帮助别人,花了大约30个小时的时间来寻找这个初学者。