0

我一直在尝试在我的 Metro 应用程序的画布上绘制图像,但到目前为止还没有出现。这是我的代码:

    Rectangle blueRectangle = new Rectangle();
        blueRectangle.Height = 100;
        blueRectangle.Width = 200;
        ImageBrush imgBrush = new ImageBrush();
        imgBrush.ImageSource = new Windows.UI.Xaml.Media.Imaging.BitmapImage(new Uri("C:\\Users\\Public\\Pictures\\dock.jpg"));
        blueRectangle.Fill = imgBrush;
        paintCanvas.Children.Add(blueRectangle);

当我使用这条线时

      blueRectangle.Fill = new SolidColorBrush(Colors.Blue);

而不是使用 ImageBrush 的那个,我得到了一个我想要的蓝色矩形,所以我想我一定是 ImageBrush 做错了什么。

当我学习如何绘制它们时,我计划将图像用作游戏中的精灵,因此我必须能够使用 c# 来操作它们。

谢谢你的帮助!

编辑:我已更改代码以访问漫游应用程序数据,但我仍然收到未找到文件的异常。(文件在正确的位置)

    ApplicationData appData = ApplicationData.Current;

        try
        {
            StorageFile sourceFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/dock.jpg"));
            await sourceFile.CopyAsync(appData.RoamingFolder);
        }
        catch (Exception ex)
        {
            // If images have already been copied the CopyAsync() methods aboev will fail.
            // Ignore those errors.
            System.Diagnostics.Debug.WriteLine(ex.ToString());
        }

        Rectangle blueRectangle = new Rectangle();
        blueRectangle.Height = 100;
        blueRectangle.Width = 200;

        // Create an ImageBrush
        ImageBrush imgBrush = new ImageBrush();

        imgBrush.ImageSource = new BitmapImage(new Uri("ms-appdata:///roaming/dock.png"));

        // Fill rectangle with an ImageBrush
        blueRectangle.Fill = imgBrush;
        //blueRectangle.Fill = new SolidColorBrush(Colors.Blue);
        paintCanvas.Children.Add(blueRectangle);
4

2 回答 2

2

我最终想通了。这就是我现在的代码。

StorageFile file;
StorageFolder InstallationFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;      

string filePath = @"Assets\dock.jpg";
file = await InstallationFolder.GetFileAsync(filePath);
IRandomAccessStream dockpic = await file.OpenAsync(0);
BitmapImage dockimage = new BitmapImage();
dockimage.SetSource(dockpic);

Rectangle blueRectangle = new Rectangle();
blueRectangle.Height = 100;
blueRectangle.Width = 200;
// Create an ImageBrush
ImageBrush imgBrush = new ImageBrush();
imgBrush.ImageSource = dockimage;

// Fill rectangle with an ImageBrush
blueRectangle.Fill = imgBrush;
paintCanvas.Children.Add(blueRectangle);

我最终使用了 StorageFolder 并使用 Stream 而不是 uri 创建了 BitmapImage。

于 2012-08-09T18:37:47.273 回答
1

您不能以这种方式从 Metro 风格应用程序访问本地数据。有关访问本地数据的方法,请参阅这篇关于访问本地数据的文章和此应用程序数据示例

于 2012-08-09T04:09:16.230 回答