编辑后,我必须更新存储在数据库中的条形图。 我有大约20个小时看例子,但只是把它放在一起。 我的班级
public class Task
{
public int TaskID { get; set; }
public DateTime? SStart { get; set; }
public DateTime? SEnd { get; set; }
public DateTime? SCert { get; set; }
public byte? Taskimage { get; set; }
}
我的控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Task task)
{
if (ModelState.IsValid)
{ db.Entry(task).State = EntityState.Modified;
db.SaveChanges();
// now create a new graph using the returned viewbag data
var Mytopleft = 0;
var Mytext = "";
Bitmap mybmp = new Bitmap(400, 20);
Graphics g = Graphics.FromImage(mybmp);
g.DrawRectangle(Pens.Black, 0, 0, 400, 20);
SolidBrush b = new SolidBrush(Color.OldLace);
g.FillRectangle(b, 0, 0, 400, 20);
// draw comma-delimited elements in multiple colors
string[] chunks = Mytext.Split(',');
var brush = new SolidBrush(Color.Black);
SolidBrush[] brushes = new SolidBrush[]
{ new SolidBrush(Color.OldLace), //removed 3 other brushes for clarity
};
int c = 0;
var tasks = db.Tasks.Include(t => t.Builder).Include(t => t.Lot);
foreach (var titem in tasks.ToList())
{
if (titem.SStart == null)
{ c = 0; }
else if (titem.SStart != null && titem.SEnd == null)
{ c = 1; } //removed 3 other cases for clarity
// create a new rectangle displaced by offset and with color
g.FillRectangle(brushes[c], Mytopleft, 0, 10, 20);
Mytopleft += 10;
}
//write to folder as a test this works Gif is arbitrary.
//can't use c:\\lot1.bmp -- can't write to root dir
mybmp.Save("C:\\temp\\lot1.gif", System.Drawing.Imaging.ImageFormat.Gif);
MemoryStream ms = new MemoryStream();
mybmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
db.SaveChanges();
}
因此,在更改日期后,我会修改条形图并更新存储在数据库中的TaskImage图像。
创建mybmp可以将文件作为测试写入临时文件夹。
我一直在努力了解如何将mybmp保存到TaskImage。我认为我的困惑部分是作业,在我以前的日子里我会做类似mybmp = toarry(System.Drawing.Imageing.ImageFormat.Gif)的事情。我认为这不适用于MVC C#。我认为图像实际上是在System.Drawing.Image中创建和修改的。
所以概括:MVC4 EF5代码首先是
- 将创建的图像保存到memorystream ????
- 将memorystream转换为字节数组
- 将byte []引用到TaskImage字段
- 告诉.State我们有一个修改....... db.Entry(task).State = EntityState.Modified;
- 保存更改..覆盖现有图像.... db.SaveChanges();
我认为这是正确的逻辑。我正在做一个完整的重绘而不是修改现有的图像,所以我不需要先检索它。 在我开始工作之后,我将更改代码以将TaskImage存储在相关表中而不是此处编辑的表中。我认为这不会改变你答案的结构。
有许多检索和传递给视图的例子。我想我可以处理。
难倒!!感谢
答案 0 :(得分:0)
伪代码:
- 将创建的图像保存到memorystream ????
- 将memorystream转换为字节数组
- 将byte []引用到TaskImage字段
- 告诉.State我们有一个修改....... db.Entry(task).State = EntityState.Modified;
- 保存更改..覆盖现有图像.... db.SaveChanges();
看起来不错。
为什么代码?
mybmp.Save("C:\\temp\\lot1.gif", System.Drawing.Imaging.ImageFormat.Gif);
MemoryStream ms = new MemoryStream();
mybmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
您要保存到文件或EF表吗?标题说保存在Db。
事实上,“问题或错误”并不清楚。
这真的是一个问题。如何将Image转换为byteArray并返回? 由于从具有Byte []类型字段的DB保存和检索记录不是问题吗? 所以我想你需要这个
public static byte[] ImageToByteArray(Image image)
{
var memoryStream = new MemoryStream();
image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg); // consider format
return memoryStream.ToArray();
}
public static Image ByteArrayToImage(byte[] byteArray)
{
var memoryStream = new MemoryStream(byteArray);
Image image = Image.FromStream(memoryStream);
return image;
}
修改强> 公共课任务 { public int TaskID {get;组; } 公共日期时间? SStart {get;组; } 公共日期时间?发送{得到;组; } 公共日期时间? SCert {得到;组; } 公共字节? Taskimage {get;组; } //<<<<<<制作字节数组?????? } 我的控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Task task)
{
if (ModelState.IsValid)
{
//
// now create a new graph using the returned viewbag data
Image graph = CreateImageFromViewBag(viewbag); // refactored out...
task.Image = ImageToByteArray(graph);
db.Entry(task).State = EntityState.Modified;
db.SaveChanges();
}
答案 1 :(得分:0)
在这里帮助其他人正在运行代码 和许多事情一样,一旦你弄明白,这很简单。这写入相关表,因此lottoupdate。
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();
我希望这有助于其他人。 要检索此图像并在视图中显示,请参阅此问题:图像到字节[]比想象的更难2挑战