none
C#中如何调用程序文件夹下的图片 RRS feed

  • 问题

  • 创建一个Metro风格的Page,在程序文件夹Images中增加了图片image1.jpg,我想在程序中的某个Page调用该图像,并在某个位置显示出来,应该怎么做么,谢谢了!没用过C#,这个是否需要像JAVA一样先定义个Image,然后用Image.Source 指定赋值,问题是现在我不知道该怎么给“Image.Source 赋值”!
    2012年5月31日 2:47

答案

全部回复

  • new BitmapImage(new Uri(Uri,"/Image/image1.jpg"))
    2012年5月31日 3:51
  • new BitmapImage(new Uri(Uri,"/Image/image1.jpg")) 会提示“Uri”是一个类型不是变量,不能使用的错误。如下写法貌似也不行,错在哪里呢?

    BitmapImage bitmapImage = new BitmapImage();          

    bitmapImage.UriSource = new Uri("/Assets/product_normal.png", UriKind.RelativeOrAbsolute);//执行到这句话时就会异常

    Scenario2Image.Source = bitmapImage;  //Scenario2Image是我在窗口创建了一个Image控件的Name

    2012年5月31日 7:38
  • 很多解决方法:

    1.

      BitmapImage bitmapImage = new BitmapImage();
      bitmapImage.UriSource = new Uri(Package.Current.InstalledLocation.Path + "/Image/image1.jpg", UriKind.RelativeOrAbsolute);
      Scenario2Image.Source = bitmapImage;

    2.

      protected async override void OnNavigatedTo(NavigationEventArgs e)
      {
          BitmapImage bitmapImage = new BitmapImage();
          StorageFolder imageFolder =await Package.Current.InstalledLocation.GetFolderAsync("Image");
          StorageFile imageFile = await imageFolder.GetFileAsync("image1.jpg");
          bitmapImage.SetSource(await imageFile.OpenAsync(FileAccessMode.Read));
          Scenario2Image.Source = bitmapImage;
      }

    3.

      BitmapImage bitmapImage = new BitmapImage();
      bitmapImage.UriSource = new Uri("ms-appx:///Image/image1.jpg", UriKind.RelativeOrAbsolute);
      Scenario2Image.Source = bitmapImage;


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月1日 3:45
    版主
  • 非常感谢Bob Bao的回复,还有几个小问题。

    1. 我的文件里不识别 await 和 Package 这两个标识,应该增加什么头文件呢?

    2.我是否可以不借助Image控件(Scenario2Image)来在界面上随意位置显示我的图片“image1.jpg”呢?

    多谢了!

    2012年6月1日 6:31
  • 使用await的方法本身必须加上async关键词: 

    protected async ....
    {
        ...
        StorageFolder imageFolder =await Package.Current.InstalledLocation.GetFolderAsync("Image");
        ...
    }

    Package 是在Windows.ApplicationModel名字空间下,简单的在VS中,我们可以右击 Package, 选择 Resolve > using .... 添加引用:

    -------------------------

    2. 呈现图片的方式  一,我们可以通过Image组件; 二,通过ImageBrush画刷作为一个元素或者一个图形的背景,填充色; 三,通过DX这样的其他渲染方式来绘制一个图像。 我觉得都没有直接Image组件简单方便。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年6月1日 6:50
    版主
  • 谢谢Bob Bao,await and Package我会使用了,谢谢!

    的确无论用什么方式显示图片都没有使用Image组件简单方便,但是我现在做的应用是游戏,图片会被频繁的切换刷新,我不能自己画这些图片,太耗时,我看IOS Android都是可以有一个图片资源里面分类放了几十张图片,然后想用那张就画那张,我现在想要的就是这样的方法,这个方法就是你说的DX渲染方式么?

    刚刚接触Metro不太熟悉,请多帮忙谢谢,对了,如果在C++上如何实现呢?

    我看你好像是负责C# 和其他语言的吧,C++有你们的同事么,再次感谢您的费心付出,谢谢!

    2012年6月1日 7:17
  • 你在最新发的那个帖子思路是对的,可以用一个集合去存储所有图片的名字,或者我们也可以将BitmapImage对象生成好然后存入一个集合,在使用时循环调用。

    DX中你可以参考 Direct2D操作图片的例子:

    相关D2D的例子还有很多,你也可以直接下子例子包,包含了200多个Metro样例: http://code.msdn.microsoft.com/windowsapps/Windows-8-Modern-Style-App-Samples


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 JJ李锋 2012年6月1日 9:49
    2012年6月1日 8:04
    版主
  • 你好,我想问一下你的这个问题是怎么解决的,我现在也是放在images文件夹下,可是不知道怎么调用到image控件中
    2015年5月4日 6:09