Windows Phone 7.1 - 由cameraCaputreTask拍摄照片的路径

时间:2013-05-13 17:27:17

标签: windows-phone-7 geolocation emulation cameracapturetask

我正在构建一个应用程序,除其他外,让用户捕获图片,然后保存图片和其他信息(如拍摄照片的位置 - 使用手机的GPS等... )在数据库上。

我使用字符串将图片保存到DataBase。到现在为止还挺好。我的问题是,在用户捕获图片后,我找不到任何图片的路径(以便稍后向用户显示) 我知道如果我使用图片而不是字符串,我可以显示图片但是我无法将其保存到数据库中。

此外,我使用图片字符串(应该是图片的路径)作为我表中的primaryKey列,如果字符串为null,这肯定是个问题。

在互联网上查看后,我发现您无法在模拟器上使用 GeoCoordinateWatcher (用于GPS),因此我不得不使用随机位置。 这让我觉得模拟器拍摄的照片可能没有路径??

我的部分代码:(相机的事件和将数据保存到数据库的瓶子)

   void c_Completed(object sender, PhotoResult e)
    {
        if (e.TaskResult == TaskResult.OK)
        {
            MessageBox.Show(e.ChosenPhoto.Length.ToString());


            //Code to display the photo on the page in an image control named myImage.
            BitmapImage bmp = new System.Windows.Media.Imaging.BitmapImage();
            bmp.SetSource(e.ChosenPhoto);
            myImage.Source = bmp;//display the picture right after taking it. before saving to DB
            p.UrlImage = bmp.UriSource.AbsolutePath;//Do not Work!

        }
    }

    private void saveToDB_Click(object sender, RoutedEventArgs e)
    {

        p.Description = DesriptionList.SelectedValue.ToString();//description of the pic
        p.Date = DateTime.Today;//date picture taken

        GeoCoordinateWatcher myWatcher = new GeoCoordinateWatcher();
        var myPosition = myWatcher.Position;
        p.Location = myPosition.Location.Altitude+" "+myPosition.Location.Latitude;//do not work with emulator
        p.Location = "Some Where Over The Rainbow";
        MainPage.m._bl.addPic(p);//add pic to DB
        MessageBox.Show("Added Successfully! :)");
        NavigationService.Navigate(new Uri(@"/Intro.xaml", UriKind.Relative));//go to another page
    }
}

我的班级:

  [Table]
public class Picture
{
    public Picture()
    {

    }

    public Picture(string l, string d, string url, DateTime da)
    {
        Location = l;
        Description = d;
        UrlImage = url;
        Date = da;
    }
    string location;

    [Column]
    public string Location
    {
        get { return location; }
        set { location = value; }
    }
    string urlImage;

    [Column (IsPrimaryKey=true)]
    public string UrlImage
    {
        get { return urlImage; }
        set { urlImage = value; }
    }
    DateTime date;
    [Column]
    public DateTime Date
    {
        get { return date; }
        set { date = value; }
    }
    string description;
    [Column]
    public string Description
    {
        get { return description; }
        set { description = value; }
    }
}

}

无论如何 - 我想知道我是否能够以某种方式获得这条道路...... 而且 - 如果我无法获得路径 - Windows是否有“更好”的模拟器? 这个模拟器不能做太多,这是非常烦人的事实,我没有WP检查我的应用程序.. 谢谢!

1 个答案:

答案 0 :(得分:0)

您已经在e.ChosenPhoto中获取了拍摄图像的流。你只需要保存它。

var imageBytes = new byte[e.ChosenPhoto.Length];
e.ChosenPhoto.Read(imageBytes, 0, imageBytes.Length);

using (var isoFile = IsolatedStorageFile.GetUserStoreForApplication()) {
  using (var stream = isoFile.CreateFile("myImage.jpg")) {
    stream.Write(imageBytes, 0, imageBytes.Length);
  }
}

编辑:

关于模拟器,没有任何错误或限制。

拍摄的图像存储在临时文件中,以后可能会消失,如果您想再次显示该图像,则需要将其保存在独立存储中。

关于GPS,您可以使用其他工具(只需点击模拟器右侧的'>>'按钮即可设置您在实际设备上找到的各种设置,例如加速度计,位置,网络,对于GeoWatcher,您可以在地图上定义一组将要播放的点,就像设备的实际GPS位置正在发生变化一样。