2013-07-19 36 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); 
}