정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Windows Phone 8의 사진 편집 선택기 확장

2014-06-18

적용 대상: Windows Phone 8 및 Windows Phone Silverlight 8.1만

 

이 항목에서는 사용자가 보고 있는 사진을 편집하기 위한 앱을 선택할 수 있는 페이지인 사진 편집 선택기에 사진 편집 앱을 표시하는 방법에 대해 설명합니다. 사용자에게 사진을 선택하라는 메시지를 표시하지 않고도 앱에서 해당 사진에 액세스하는 방법을 알아보세요. 사진 환경을 확장할 수 있는 다른 방법에 대한 자세한 내용은 Windows Phone 8의 사진 확장성을 참조하세요.

참고참고:

이 항목에 나오는 코드 대부분은 사진 확장성 샘플에서 가져온 것입니다.

이 기능은 Windows Phone 8 사진 편집 앱에서만 제공됩니다. 앱이 스토어 에서 인증을 받을 수 있도록 하려면 Windows Phone의 특정 앱 유형에 대한 추가 요구 사항을 참조하세요.

이 항목에는 다음 단원이 포함되어 있습니다.

 

사진 편집 선택기는 기본 제공 사진 뷰어에 표시됩니다. 편집 링크를 탭하여 앱 바에서 사진 편집 선택기를 실행합니다. 다음 이미지는 사진 뷰어의 편집 링크 및 사진 편집 선택 확장의 이름(이 항목의 뒷부분에 설명됨)을 보여 줍니다.

Extending the photo viewer edit link.

다음 단계에서는 사진 편집 선택기에 앱을 통합하는 방법에 대해 설명합니다.

Windows Phone 8 앱에서는 미디어 라이브러리의 사진에 액세스하기 위한 ID_CAP_MEDIALIB_PHOTO 기능을 지정해야 합니다. 기능은 앱 매니페스트 파일 WMAppManifest.xml에서 지정합니다.

<!-- For accessing photos in the media library. -->
<Capability Name="ID_CAP_MEDIALIB_PHOTO" />

사진 편집 선택기에 표시하려면 앱에서 Photos_Extra_Image_Editor 확장을 등록해야 합니다. 확장은 WMAppManifest.xml에서 지정합니다. Tokens 요소 바로 뒤 Extensions 요소 내에서 다음 Extension 요소를 사용하여 사진 편집 선택기 확장을 지정합니다.

<Extension ExtensionName="Photos_Extra_Image_Editor" 
           ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}" 
           TaskID="_default" />

Windows Phone 매니페스트 디자이너는 확장을 지원하지 않으므로 XML(텍스트) 편집기를 사용하여 확장을 편집합니다. 자세한 내용은 Windows Phone 8의 앱 매니페스트 파일을 수정하는 방법을 참조하세요.

사용자가 사진 편집 선택기에서 앱을 탭하면 앱을 열고 사용자가 보고 있는 사진에 대한 토큰이 전송되도록 딥 링크 URI가 실행됩니다. URI에 EditPhotoContentFileId 문자열이 포함되면 앱에서 사진 편집 선택기 실행을 감지할 수 있습니다. 다음 예제는 사진 편집 선택기의 실행 URI입니다(기본 탐색 페이지가 MainPage.xaml인 경우 URI 매퍼에서 확인됨).

/MainPage.xaml?Action=EditPhotoContent&FileId=%7Bea74a960-3829-4007-8859-cd065654fbbc%7D

이 예제에서는 FileId 매개 변수 값이 토큰입니다. 이 문자열을 사용해 미디어 라이브러리에서 사진을 검색할 수 있습니다. 이 작업은 이 항목 뒷부분에서 설명합니다.

사진 편집 선택기가 기본 탐색 페이지(이 경우 MainPage.xaml)를 대상으로 하므로, 아무 URI 매핑도 구현하지 않으면 이 페이지가 실행됩니다. 앱의 기본 탐색 페이지가 토큰에서 참조된 사진을 편집할 수 있는 경우 URI 매핑이 필요하지 않을 수 있습니다.

단, 사진을 편집하기 위해 다른 페이지를 실행하려면 URI를 해당 페이지에 매핑해야 합니다. 다음 예제에서는 사용자 지정 URI 매퍼 클래스를 사용해 이 작업을 수행하는 방법을 보여 줍니다.


using System;
using System.Windows.Navigation;

namespace CustomMapping
{
    class CustomUriMapper : UriMapperBase
    {
        public override Uri MapUri(Uri uri)
        {
            string tempUri = uri.ToString();
            string mappedUri;

            // Launch from the photo edit picker.
            // Incoming URI example: /MainPage.xaml?Action=EditPhotoContent&FileId=%7Bea74a960-3829-4007-8859-cd065654fbbc%7D
            if ((tempUri.Contains("EditPhotoContent")) && (tempUri.Contains("FileId")))
            {
                // Redirect to PhotoEdit.xaml.
                mappedUri = tempUri.Replace("MainPage", "PhotoEdit");
                return new Uri(mappedUri, UriKind.Relative);
            }

            // Otherwise perform normal launch.
            return uri;
        }
    }
}


이 예제에서 URI 매퍼는 URI 내 페이지 이름을 대체하여 수신 URI를 이름이 PhotoEdit.xaml인 페이지에 매핑합니다. 해당 메서드에서 반환된 URI는 앱이 시작될 때 첫 번째 페이지를 실행하기 위해 앱의 루트 프레임에서 사용됩니다. 루트 프레임은 앱이 초기화될 때 할당되므로 사용자 지정 URI 매퍼를 사용합니다. 다음 코드에서는 URI 매퍼가 App.xaml.cs 파일의 InitializePhoneApplication 메서드에 할당되는 방법을 보여 줍니다.


private void InitializePhoneApplication()
{
    if (phoneApplicationInitialized)
        return;

    // Create the frame but don't set it as RootVisual yet; this allows the splash
    // screen to remain active until the application is ready to render.
    RootFrame = new PhoneApplicationFrame();
    RootFrame.Navigated += CompleteInitializePhoneApplication;

    // Handle navigation failures
    RootFrame.NavigationFailed += RootFrame_NavigationFailed;

    // Assign the custom URI mapper class to the application frame.
    RootFrame.UriMapper = new CustomMapping.CustomUriMapper();

    // Ensure we don't initialize again
    phoneApplicationInitialized = true;
}


실행된 페이지는 페이지 NavigationContext 개체의 QueryString 속성을 사용하여 페이지를 실행한 URI의 모든 매개 변수에 액세스할 수 있습니다. 다음 예제에서는 FileId 매개 변수 값을 MediaLibraryGetPictureFromToken(String) 메서드와 함께 사용하여 미디어 라이브러리에서 사진을 추출하는 방법을 보여 줍니다. 이 코드는 사진 확장성 샘플의 PhotoEdit.xaml.cs 파일에서 가져온 것입니다.


protected override void OnNavigatedTo(NavigationEventArgs e)
{
    // Get a dictionary of query string keys and values.
    IDictionary<string, string> queryStrings = this.NavigationContext.QueryString;

    // Ensure that there is at least one key in the query string, and check whether the "FileId" key is present.
    if (queryStrings.ContainsKey("FileId"))
    {
        // Retrieve the photo from the media library using the FileID passed to the app.
        MediaLibrary library = new MediaLibrary();
        Picture photoFromLibrary = library.GetPictureFromToken(queryStrings["FileId"]);

        // Create a BitmapImage object and add set it as the image control source.
        // To retrieve a full-resolution image, use the GetImage() method instead.
        BitmapImage bitmapFromPhoto = new BitmapImage();
        bitmapFromPhoto.SetSource(photoFromLibrary.GetPreviewImage());
        image1.Source = bitmapFromPhoto;
    }
}


이 절차에서는 편집 링크에서 사진 확장성 샘플을 시작하는 방법을 설명합니다.

사진 편집 선택기 확장성을 테스트하려면

  1. 사진 확장성 샘플을 다운로드하여 Windows Phone SDK 에서 엽니다.

  2. 메뉴에서 디버그를 선택하고 디버깅 시작을 선택합니다.

  3. 앱의 기본 페이지가 나타나면 시작을 탭하여 시작 화면으로 이동합니다.

  4. 시작 화면에서 사진 앱을 탭한 후 사진을 선택하고 사진 뷰어에서 사진을 봅니다.

  5. 페이지 아래쪽의 앱 바에서 점 세 개를 탭합니다. 앱 바가 확장되면 편집 링크를 탭합니다.

  6. 편집 페이지에서 앱 이름을 탭합니다. 이렇게 하면 방금 보던 사진의 토큰이 포함된 URI가 실행됩니다. 이 URI는 PhotoEdit.xaml 페이지를 실행하고 방금 보고 있었던 사진을 표시합니다.

표시: