Windows Phone的PictureBox

4

我正在使用C#开发一个Windows Phone 8.1应用程序。我正在使用相机拍照。然后将照片保存在设备上,并尝试在picturebox中显示它。

我已经在HTC手机上测试过它,效果很好,但是当我在诺基亚Lumia上尝试时,照片永远不会加载。

有人有解决方法吗?

这是我用来拍照的代码:

    private void snap_task_Click(object sender, EventArgs e)
    {
        cameraCaptureTask = new CameraCaptureTask();
        cameraCaptureTask.Completed += cameraCaptureTask_Completed;
        cameraCaptureTask.Show();

    }

    void cameraCaptureTask_Completed(object sender, PhotoResult e)
    {
        if (e.TaskResult == TaskResult.OK)
        {
            NavigationService.Navigate(new Uri("/Slika.xaml?fotka=" + e.OriginalFileName, UriKind.Relative));

        }
    }

这是我尝试加载图片的代码。

    public Slika()
    {
        InitializeComponent();
        string slika = string.Empty;
        string slika2 = string.Empty;
        this.Loaded += (s, e) =>
        {

            if (NavigationContext.QueryString.TryGetValue("fotka", out slika))
            {

                putanja = slika; /*"/Resources/" + slika + ".png";/**/

                int x = putanja.Length;

                if (x == 1)
                {
                    putanja = "/Resources/" + putanja + ".png";
                    uriPutanja = new Uri(putanja, UriKind.Relative);
                    fotka = new BitmapImage(uriPutanja);
                }
                else
                {
                    uriPutanja = new Uri(putanja, UriKind.Relative);
                    porukaTextBox.Text = putanja;
                    fotka = new BitmapImage(uriPutanja);
                }
            }
            img1.Source = fotka;

        };

    }

PS

本地资源的加载在两部手机上都正常,只有“else”部分在诺基亚手机上出现问题。


图片保存在 CameraRoll 文件夹中,您需要从那里获取它。 - Romasz
我知道它被保存在那里,字符串“putanja”包含了整个图片路径,所以应该可以工作吧?如果我做错了什么,你能否请发一个代码示例? - ivan-crg
3个回答

3
你正在将图片保存在手机的相机胶卷文件夹中,请尝试将其保存在内存卡上,然后再尝试一下(你可以在手机设置中更改设置,让新图片保存在SD卡上)。如果这样做有效,请尝试使用PhotoChooserTask获取图像。我希望以下代码能帮到你:
    using Microsoft.Phone.Tasks;
    using System.IO;
    using System.Windows.Media.Imaging;
    ...
    PhotoChooserTask selectphoto = null;
    private void button1_Click(object sender, RoutedEventArgs e)
    {
        selectphoto = new PhotoChooserTask();
        selectphoto.Completed += new EventHandler(selectphoto_Completed);
        selectphoto.Show();
    }
    void selectphoto_Completed(object sender, PhotoResult e)
    {
        if (e.TaskResult == TaskResult.OK)
        {
            BinaryReader reader = new BinaryReader(e.ChosenPhoto);
            image1.Source = new BitmapImage(new Uri(e.OriginalFileName));
        }
    }

1
谢谢你的帮助,现在当我把图片保存到SD卡中时它可以工作了,我现在会尝试使用你的代码来选择照片。 - ivan-crg

2

您可以尝试将UriKind从相对路径更改为绝对路径。如果我理解您的代码,您将获得图片的绝对路径。


1
我已经尝试过了,但仍然无法正常工作。我还尝试将UriKind设置为AbsoluteOrRelative,但也没有起作用。 - ivan-crg

0

根据我的理解,您在else语句中忘记了.png。


我也已经检查过了,但是图片是一个 .jpg 格式的,并且扩展名已经写在“putanja”字符串中,所以我绝对确定那不是问题所在。此外,它在一个手机上是可以工作的。 - ivan-crg
如果是真的,那么第一个if语句中需要创建扩展名,但else语句中却不需要,这似乎有些奇怪。这是我能看到的唯一问题。 - JTIM
在第一个if语句中,我只使用了保存在本地资源中的图片名称,这就是为什么我需要添加路径和扩展名的原因。而在else部分,整个路径和扩展名都保存在“putanja”字符串中。无论如何,感谢您的帮助 :) - ivan-crg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接