[英]C# Save image without using Dialog
當用戶在表單上按下“保存團隊”時,我無法將用戶上傳的圖像保存到我的“徽標”文件中。
為了讓您品嘗一下應用程序的功能,我在此處提供了一個屏幕截圖 ,按添加團隊后,所有文本框數據都將寫入文本文件,並且我希望圖像自動保存到預定義的文件夾“徽標”中。每當我按保存時,我都會收到GDI ++錯誤。
閱讀完網絡上的一些舊線程后,我發現它可能是由諸如文件許可權,文件大小,文件名甚至是開放流之類的幾件事引起的。
以下是我當前用於保存文件的代碼,該文件提示錯誤:
private void btnAddTeam_Click(object sender, EventArgs e)
{
//VALIDATION FOR TEXT FILE AND OTHER STUFF HERE...
//SAVE THE IMAGE FILE
string filePath = picTeamLogo.ImageLocation;
Image tempImage = Image.FromFile(filePath);
tempImage.Save(@"../logos/");
}
如果您正在查看屏幕截圖,請不要對“ arsenal.png”感到困惑。我知道這不是完整的文件路徑,它的轉換是通過另一種方法處理的,因為只需要將文件名寫入文本即可文件。
如果有人對我要去哪里有任何想法,請指出正確的方向,諸如我剛收到的GDI之類的模糊錯誤實在令人頭疼!
亞歷克斯。
試試這個方法
public void storeFile(FileUpload File, string dirName)
{
if (!Directory.Exists(MapPath("~/uploads/" + dirName)))
{
Directory.CreateDirectory(MapPath("~/uploads/" + dirName));
}
string saveLocation = MapPath("~/uploads/" + dirName + "/" + Path.GetFileName(File.FileName));
File.SaveAs(saveLocation);
}
有關類似問題,請參閱我的早期文章。
流保持鎖定狀態-您可以將內存流用作臨時位置,然后保存。
從文件構造位圖對象或圖像對象時,文件在對象的生存期內保持鎖定狀態。 因此,您無法更改圖像並將其保存回其原始位置。 http://support.microsoft.com/?id=814675
string outputFileName = "...";
using (MemoryStream memory = new MemoryStream())
{
using (FileStream fs = new FileStream(outputFileName, FileMode.Create, FileAccess.ReadWrite))
{
tempImage.Save(memory, ImageFormat.Jpeg);
// memory.ToStream(fs) // I think the same
byte[] bytes = memory.ToArray();
fs.Write(bytes, 0, bytes.Length);
}
}
或者可以選擇通過MemoryStream
將圖像加載到圖像中-這樣一來,流就不會被鎖定...
那是因為您沒有指定保存功能的文件名!
看看這個 :
string filePath = picTeamLogo.ImageLocation;
FileInfo fi = new FileInfo(filePath);
Image tempImage = Image.FromFile(fi.FullName);
tempImage.Save(@"../logo/" + fi.Name);
現在它可以正常工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.