2014-09-19 1 views
0

를 사용하여 가져 오기, 나는 다음과 같은 IEnumerable을 속성 ImageCollection, 사용자가 선택할 수있는 가능한 모든 인앱 사진의 컬렉션을 보유사진 파일 열린 우리당 내 현재 프로젝트의 PhotoChooserTask의 WP8

public static IEnumerable<Uri> ImageCollection { get; set; } 

있습니다. 이 기능에는 사용자가 갤러리에서 선택할 수 있어야합니다. 난 내가 데이터베이스, 참조, 열린 우리당 또는 e.OriginalFileName을 저장할 것이다, 그러나, 이하의 코드를 사용하여 이미지 소스를 설정하는

private void photoChooserTask_Completed(object sender, PhotoResult e) 
    { 
     try 
     { 
      if (e.TaskResult == TaskResult.OK) 
      { 
       BitmapImage image = new BitmapImage(); 
       image.SetSource(e.ChosenPhoto); 

       LibrImage.Source = image; 

       ViewModelLocator.SelectedImage = image; 
      } 
     } 
     catch (Exception) 
     { 
      Common.ShowMessageBox("Error occured while saving pic."); 
     } 
    } 

을 PhotoChooserTask 코드 아래를 사용하고 있습니다. Isolated Storage에 복사본을 저장하더라도, 내가 찾고있는 것을 얻을 수 없다는 것을 알게되었습니다. - photoChooserTask를 사용하여 선택한 파일에 대한 참조를 얻습니다. 나는 틀릴지도 모른다.

초기 아이디어는 Gallery 파일의 Uri를 ImageCollection에 추가하고 항목 당 데이터베이스에 인덱스를 저장하는 것이었지만 제안이나 즉석을 주시면 감사하겠습니다.

참고 : PhotoChooserTask 태그를 사용할 수 없으며 기본 논리가 동일하므로 CameraCaptureTask 태그를 추가했습니다.

편집 코드를 저장하고 내가 GetImageFromIsolatedStorage의 결과 (나에게) 방법 이미지 컨트롤 소스를 바인딩하고

IsolatedStorage

에서 검색하는 데 사용됩니다. 이게 나던 .. 뭐가 잘못 됐어 ...

public static string SaveImageToIsolatedStorage(BitmapImage bitImg) 
     { 
      string fname = null; 

      if (bitImg != null) 
      { 
       fname = GetImageName(); 

       WriteableBitmap wbmp = new WriteableBitmap(bitImg); 
       IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication(); 
       using (isf) 
       { 
        if (isf.FileExists(fname)) { isf.DeleteFile(fname); } 

        using (var stream = isf.OpenFile(fname, System.IO.FileMode.OpenOrCreate)) 
        { 
         wbmp.SaveJpeg(stream, bitImg.PixelWidth, bitImg.PixelHeight, 0, 100); 
         stream.Close(); 
        } 
       } 
      } 

      return fname; 
     } 

     private static string GetImageName() 
     { 
      return string.Format(
       "{0}/GalleryImage{1}.jpg", 
       FileDir, 
       ImageCount++); 
     } 

     public static BitmapImage GetImageFromIsolatedStorage(string fname) 
     { 
      BitmapImage img = new BitmapImage(); 
      try 
      { 
       using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) 
       { 
        using (IsolatedStorageFileStream fileStream = isf.OpenFile(fname, FileMode.Open, FileAccess.Read)) 
        { 
         img.SetSource(fileStream); 
         fileStream.Close(); 
        } 
       } 
      } 
      catch { } 

      return img; 
     } 

답변

0

그건 불가능합니다. ChooserTask 및 장치 라이브러리에 대한 완전한 액세스는 Windows Phone의 두 가지 다른 기능입니다.

앱이 라이브러리에 대한 완전한 액세스 권한을 갖도록 지정하거나 ChooserTask를 사용하여 사용자가 사진을 선택 (자르기 기능도 있음) 한 다음이 이미지를 앱의 격리 된 저장 공간에 저장할 수있게하십시오.

+0

고립 된 저장 장치에 이미지를 저장하더라도 Uri가 참조 할 수 없습니다. 그렇습니까? –

+0

나는 [THIS] (http://stackoverflow.com/questions/22375669/photochoosertask-save-and-view-image-in-windows-phone-8?rq=1) 스레드를 제안대로 진행하고 있습니다. –

+0

격리 된 저장소에 이미지를 저장 한 경우 예, Uri를 참조 할 수 있습니다. 앱이 고립 된 저장 공간에 완전히 액세스 할 수 있기 때문입니다. – Filip

관련 문제