我在一个工程a中,添加11.png后,使用下面代码调用,编译正常。
image1.Source = new BitmapImage((new Uri(@"Images\11.png", UriKind.Relative)));但是在另一个工程b中,添加22.png后,使用下面代码调用,编译时提示在Debug目录下找不到22.png。
image1.Source = cutImage("22.png", 0, 0, 100, 100);//cutImage函数对指定路径的图片进行剪切其中的一部分
private BitmapSource cutImage(string imgaddress, int x, int y, int width, int height)
  {
  return new CroppedBitmap(
  BitmapFrame.Create(new Uri(imgaddress, UriKind.Relative)),
  new Int32Rect(x, y, width, height)
  );
  }
求正解!

解决方案 »

  1.   

    先确认22.png的路径是否找到,你那么写,应该是exe路径下的
      

  2.   

    你可以在Visual Studio里右键单击那个png文件,点属性,
    将 复制到输出目录 选择为 总是然后,你使用这个文件的时候不需要任何路径,只需要文件名即可
      

  3.   


    谢谢你的提示,22.png的路径确实不存在,但是我试过@"Images/22.png"这个路径也是不可以,提示:
    "未找到...\bin\Debug\Images\Rabbit.png"。请Tim也给我讲讲a工程中的相对路径没问题,为什么b工程中的相对路径却跑到了debug文件夹下去找\Images\22.png?
      

  4.   

    你没有回答我的问题,你这样做,在编译的debug目录中会有.png文件,我的意思是:a工程中debug目录中为什么不需要.png文件,而b工程中debug目录中需要.png文件。
      

  5.   

    跟绝对路径相对路径没关系...显然你的a项目是Web项目,调试时所有代码文件和资源文件位置都不变...b项目是Windows项目,调试时可执行文件和资源文件都被复制到bin\debug文件夹中,不受项目管理的文件不予理会...很显然你那个22.png不是项目资源文件,虽然你认为这个文件和项目有关系但VS不认为它们有任何关系...
      

  6.   

    image1.Source = cutImage(@"Images/22.png", 0, 0, 100, 100);//cutImage函数对指定路径的图片进行剪切其中的一部分
    private BitmapSource cutImage(string imgaddress, int x, int y, int width, int height)
      {
      return new CroppedBitmap(
      BitmapFrame.Create(new Uri(imgaddress, UriKind.Relative)),
      new Int32Rect(x, y, width, height)
      );
      }
    这样写提示的结果也是找不到.png文件。
    为什么a工程的png文件能被编译到生成的exe文件中;
    而b工程的png文件只能添加到debug路径下才能正常编译,并且编译成功后exe和png文件都需要同时存在。
      

  7.   

    哦,没仔细看...你这是WPF项目,同样的是资源文件的事...WPF管理资源文件比较复杂,分几种方式,都有各自的规则,去看看MSDN吧...
      

  8.   

    不是资源文件的问题。
    早上调试代码的时候把b工程的:
    image1.Source = cutImage("Images/22.png", 0, 0, 100, 100);
    改为:
    image1.Source = new BitmapImage((new Uri(@"Images/22.png", UriKind.Relative)));
    编译通过,运行正常。所以应该是cutImage函数中的调用的方法的问题。寻找答案中...
      

  9.   

    MS说了,CroppedBitmap调用的ImageSource就是要把图片保存到本地路径下。