0

Я создаю приложение, которое должно, среди прочего, позволить пользователю сделать снимок, а затем сохранить изображение и другую информацию (например, местоположение того места, где была сделана эта фотография - использование GPS телефона и т. д.) на базе данных.Windows Phone 7.1 -Сохранение пути, сделанного камеройCaputreTask

Я использую строку для сохранения изображений в базе данных. Все идет нормально. Моя проблема в том, что после того, как пользователь захватил изображение, я не могу найти путь к картине anyWhere (чтобы отобразить его позже для пользователя) Я знаю, что я могу отобразить изображение, если я использую изображение, а не строку но тогда я не могу сохранить его в БД.

Также я использовал строку изображения (которая должна быть путь к изображению) как столбец primaryKey в моей таблице, и если строка равна null, это будет проблемой точно.

После проверки в Интернете я обнаружил, что вы не можете использовать GeoCoordinateWatcher (для GPS) на эмуляторе, поэтому мне пришлось использовать случайное место. Это привело меня к мысли, что изображение, сделанное эмулятором, может не иметь пути?

Часть моего кода: (Событие камеры и bottun, что позволяет экономить Everyting к БД)

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; } 
    } 
} 

}

Anyway- I Would как узнать, могу ли я каким-то образом получить путь ... А также - если я не могу получить путь - есть ли у Windows эмулятор «Лучше»? этот эмулятор не может сделать много, и это довольно раздражает, давая факт, что у меня нет WP, чтобы проверить мои приложения на .. Спасибо!

ответ

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-устройства было изменено.

+0

большое спасибо! :) – nati

Смежные вопросы