2013-07-19 35 views
0

我想將加載的圖片保存到某個目錄,但它一直返回無效的目錄。下面是我使用保存c時返回無效目錄#

if (OpenCdb != null) 
{ 
    string pics = Path.GetDirectoryName(OpenCdb.FileName); 
    // Save card image 
    ImageResizer.SaveImage(CardImg.Image, pics + "\\pics\\" + cardid + ".jpg", 177, 254); 
    //Save card thumbnail 
    ImageResizer.SaveImage(CardImg.Image, pics + "\\pics\\thumbnail\\" + cardid + ".jpg", 44, 64); 
} 

我已經測試pics字符串及其返回正確的目錄中,所以我不知道自己還能做些什麼的代碼。如果您也需要我,我也可以發佈imageresizer函數代碼,但這是很多代碼,這就是爲什麼我沒有在問題中添加它的原因。

編輯繼承人的錯誤 enter image description here

public static void SaveImage(Image image, string savedName, int width = 0, int height = 0) 
    { 
     Image originalImage = image; 
     string filePath = AppDomain.CurrentDomain.BaseDirectory + savedName; 

     if (width > 0 && height > 0) 
     { 
      Image.GetThumbnailImageAbort myCallback = 
      new Image.GetThumbnailImageAbort(ThumbnailCallback); 
      Image imageToSave = originalImage.GetThumbnailImage 
       (width, height, myCallback, IntPtr.Zero); 
      imageToSave.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg); 
     } 
     else 
     { 
      originalImage.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg); 
     } 
    } 
+1

究竟你「這使人返回無效的目錄」是什麼意思?什麼返回什麼價值?什麼是OpenCdb?您在這裏沒有提供足夠的背景。 –

+0

你用'Path.Combine()'試過了嗎?在使用斷點進行調試時,哪行發生錯誤? –

+0

你期望什麼?你得到了什麼? ...在哪裏? – derape

回答

0

不要介意大家我得到它在這裏工作是我結束了使用

public static void SaveImage(Image image, string savedName, int width = 0, int height = 0) 
    { 
     Image originalImage = image; 
     string filePath = savedName; 

     if (width > 0 && height > 0) 
     { 
      Image.GetThumbnailImageAbort myCallback = 
      new Image.GetThumbnailImageAbort(ThumbnailCallback); 
      Image imageToSave = originalImage.GetThumbnailImage 
       (width, height, myCallback, IntPtr.Zero); 
      imageToSave.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg); 
     } 
     else 
     { 
      originalImage.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg); 
     } 
    } 

的代碼..

public void SaveImage(string cardid) 
    { 
     if (LoadedImage != "") 
     { 
      if (OpenCdb != null) 
      { 
       string pics = Path.GetDirectoryName(OpenCdb.FileName); 
       // Save card image 
       ImageResizer.SaveImage(CardImg.Image, pics + "\\pics\\" + cardid + ".jpg", 177, 254); 
       //Save card thumbnail 
       ImageResizer.SaveImage(CardImg.Image, pics + "\\pics\\thumbnail\\" + cardid + ".jpg", 44, 64); 
      } 
      else 
      { 
       string pics = AppDomain.CurrentDomain.BaseDirectory; 
       // Save card image 
       ImageResizer.SaveImage(CardImg.Image, 
         pics + "pics\\" + cardid + ".jpg", 177, 254); 
       //Save card thumbnail 
       ImageResizer.SaveImage(CardImg.Image, 
         pics + "pics\\thumbnail\\" + cardid + ".jpg", 44, 64); 
      } 
     } 
    } 
2

我想的東西的PIC是錯誤的一個或多個的字符串。

  1. 使用Path.Combine例如Path.Combine(pics, "pics", cardid + ".jpg")Path.Combine(AppDomain.CurrentDomain.BaseDirectory, savedName)

另外,我想使用它像以前那樣全路徑組合:

string fullPath = Path.Combine(pics, "pics", cardid + ".jpg")

UPDATE

如下所述,路徑混錯.. 您設置像這樣的圖片:

string pics = Path.GetDirectoryName(OpenCdb.FileName);

這將導致在pics = C:\something\something

然後調用SaveImage這樣的:

SaveImage(CardImg.Image, pics + "\\pics\\" + cardid + ".jpg", 177, 254);

而且在你現在設置pics = savedName該方法和完整的路徑將爲:

string filePath = AppDomain.CurrentDomain.BaseDirectory + savedName;

是C:\ somethingelse \ C:\什麼\東西

+0

我試過這件事,一切都檢查出來,但仍然錯誤 – outlaw1994

3

你試圖保存到由像這樣的路徑:

AppDomain.CurrentDomain.BaseDirectory + Path.GetDirectoryName(OpenCdb.FileName) + "\\pics\\" + cardid + ".jpg" 

有每一個機會,結果看起來像「C :\ blahC:\ MEH \圖片\ something.jpg」

+0

我剛測試它,這是正在返回的路徑是正確的路徑C:\ Users \ hp owner \ Desktop \ OutlawPro \ pics \ thumbnail \ 1234567890.jpg – outlaw1994

+0

但是...它在圖片中。 「filePath」是BaseDirectory和savedName的串聯。代碼示例中的savedName是以OpenCdb.FileName的GetDirectoryName開頭的。 – Zec

+0

@ outlaw1994 - 從哪裏返回的路徑?那是filePath或savedName的值嗎?或者它是連接它們的結果? – Zec

1

哇,我再次創造了情況,發現後面的解決方案

解決方案是在這裏

步驟1:(不是必要的,但預防的一種更好的方式)

add Directory.CreateDirectory(Path.GetDirectoryName(fi lePath));到SaveImage如下

public static void SaveImage(Image image, string savedName, int width = 0, int height = 0) 
    { 
     Image originalImage = image; 
     string filePath = AppDomain.CurrentDomain.BaseDirectory + savedName; 
     Directory.CreateDirectory(Path.GetDirectoryName(filePath)); 
. 
. 
. The Rest code 
. 
. 
. 
. 
. 
. 
. 
} 

步驟2:

if (OpenCdb != null) 
{ 
    string pics ="";// no need of this (this is the problem) Path.GetDirectoryName(OpenCdb.FileName); 

Path.GetDirectoryName(OpenCdb.FileName);西港島線返回類似C:在SaveImage ***你又combinig與AppDomain.CurrentDomain.BaseDirectory這是問題

// Save card image 
    ImageResizer.SaveImage(CardImg.Image, pics + "\\pics\\" + cardid + ".jpg", 177, 254); 
    //Save card thumbnail 
    ImageResizer.SaveImage(CardImg.Image, pics + "\\pics\\thumbnail\\" + cardid + ".jpg", 44, 64); 
}