Image to Byte []比思考2挑战更难

时间:2013-12-19 14:14:37

标签: arrays entity-framework asp.net-mvc-4 bitmap

这是我在一个月内试图解决我认为是一个简单问题的第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[]' 

有人建议我问一个新问题。 我是初学者所以请明确。当我有一个有效的答案时,我会回去发布我之前帖子的答案,以帮助其他人。

2 个答案:

答案 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个小时的时间来寻找这个初学者。