編輯完成後,我必須更新存儲在數據庫中的條形圖。 我有大約20小時看例子,但把它放在一起。 我班MVC4 EF5更新位圖圖像 - 保存分貝
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 ????
- 將內存轉換爲字節數組
- 引用byte []到TaskImage字段
- 告訴.State我們有一個修改....... db.Entry(task).State = EntityState.Modified;
- 保存更改..覆蓋現有圖像.... db.SaveChanges();
我認爲這是正確的邏輯。我正在做一個完整的重繪而不是修改現有的圖像,所以我不需要先檢索它。 順便說一句,我得到這個工作後,我會改變代碼存儲在一個相關的表中的TaskImage,而不是在這裏編輯表。我不認爲這會改變你答案的結構。
有很多檢索和傳遞的例子來查看。我想我可以解決這個問題。
難倒!由於
我見過的往返,但無法弄清楚如何採取「返回」寫它到EF表中的TaskImage字段。 – user2887440
如何將原則轉換爲內嵌代碼。這是「返回」並將其寫入EF表中的TaskImage字段。這似乎是行image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg)將圖像保存到ms。 ms.ToArray)將其轉換爲字節[]。現在我需要代碼將.ToArray()分配給TaskImage。然後,我假設我的db.Entry ....將更新記錄。@ philsoady – user2887440
是的問題是如何從內存流獲取db.save。像Task.TaskImage = ImageFromStream(ms.ToArray()); @phil – user2887440