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

방법: Windows Phone의 JPEG 디코딩

2012-02-09

이 섹션에서는 응용프로그램에서 JPEG 파일을 WriteableBitmap 개체로 디코딩하는 방법에 대해 설명합니다. 이렇게 하는 이유 중 하나는 응용프로그램이 사진을 수정하거나 편집할 수 있도록 하기 위해서입니다. 수행되는 작업은 다음과 같습니다.

  • 적절한 네임스페이스 추가 및 샘플용 디자인 화면 만들기

  • 응용프로그램에서 JPEG 파일에 대한 URI 및 스트림 만들기

  • DecodeJpeg(Stream) 메서드를 사용하여 JPEG 파일을 WriteableBitmap 개체로 디코딩

다음 절차의 단계는 Windows Phone용 Visual Studio 2010 Express에 적용됩니다. Visual Studio 2010 Professional 또는 Visual Studio 2010 Ultimate용 추가 기능을 사용하는 경우에는 메뉴 명령이나 창 레이아웃에서 일부 소규모 변형이 나타날 수 있습니다.  이 항목은 C# 개발을 기준으로 하지만 Visual Basic 코드도 제공됩니다. 

먼저 새 프로젝트를 만들고 필요한 네임스페이스를 추가해야 합니다.

새 프로젝트를 만들고 네임스페이스를 추가하려면

  1. Windows Phone용 Visual Studio 2010 Express 에서 파일 | 새 프로젝트 메뉴 명령을 선택하여 새 프로젝트를 만듭니다.

  2. 새 프로젝트 창이 표시됩니다. Visual C# 템플릿을 확장하고 Windows Phone용 Silverlight 템플릿을 선택합니다.

  3. Windows Phone 응용프로그램 템플릿을 선택합니다. 이름 상자에 선택한 이름을 입력합니다.

  4. 확인을 클릭합니다. 새 Windows Phone 응용프로그램 창이 표시됩니다.

  5. 대상 Windows Phone 버전 메뉴에서 Windows Phone 7.1 이 선택되었는지 확인합니다.

  6. 확인을 클릭합니다. 새 프로젝트가 생성되고 MainPage.xaml이 Visual Studio 디자이너 창에서 열립니다.

  7. 프로젝트 메뉴에서 참조 추가를 선택합니다. .NET 탭에서 Microsoft.XNA.Framework를 선택하고 확인을 클릭합니다.

  8. 기본 페이지에 대한 코드 숨김 파일인 MainPage.xaml.cs를 열고 페이지의 맨 위에 다음 지시문을 추가합니다.

    using System.Windows.Resources;
    using System.Windows.Media.Imaging;
    using Microsoft.Phone;
    
    
    

디자인 화면을 만들려면

  • MainPage.xaml에서 LayoutRoot라는 Grid를 다음 코드로 바꿉니다.

        <!--LayoutRoot is the root grid where all page content is placed-->
        <Grid x:Name="LayoutRoot" Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
    
            <!--TitlePanel contains the name of the application and page title-->
            <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
                <TextBlock 
                    x:Name="ApplicationTitle" Text="PHOTOS" 
                    Style="{StaticResource PhoneTextNormalStyle}"/>
                <TextBlock 
                    x:Name="PageTitle" Text="decode" Margin="9,-7,0,0" 
                    Style="{StaticResource PhoneTextTitle1Style}"/>
            </StackPanel>
    
            <!--ContentPanel - place additional content here-->
            <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                
                <Button 
                    Content="Load" 
                    Height="70" 
                    HorizontalAlignment="Left" 
                    Margin="159,407,0,0" 
                    Name="btnLoad" 
                    VerticalAlignment="Top" 
                    Width="152" />
                
                <Image 
                    Height="395" 
                    HorizontalAlignment="Left" 
                    Margin="6,6,0,0" 
                    Name="image1" 
                    Stretch="Fill" 
                    VerticalAlignment="Top" 
                    Width="468" />
                
            </Grid>
        </Grid>
    
    
    참고참고:

    이 코드는 페이지의 맨 위에서 중간 부분을 차지할 Image 컨트롤과 btnLoad라는 Button 컨트롤을 만듭니다. 이러한 컨트롤의 방향은 아래 그림에 나와 있습니다.

이 섹션에서는 btnLoad 클릭 이벤트 처리기에 코드를 추가하여 JPEG 파일을 WriteableBitmap 개체로 디코딩합니다. 이 프로세스는 프로젝트에 추가할 JPEG 파일의 스트림 만들기, JPEG 스트림을 WriteableBitmap 개체로 만들기, Image 컨트롤을 통해 출력 보기를 포함합니다.

JPEG 파일을 WriteableBitmap 개체로 디코딩하려면

  1. 솔루션 탐색기를 통해 프로젝트에 JPEG 파일을 추가합니다. 프로젝트 이름 위로 사진을 끌기만 하면 사진이 추가됩니다. 이 예제에서는 TestImage.jpg라는 파일이 사용되었습니다. 프로젝트에서의 이 경로 위치를 알고 있어야 합니다.

  2. MainPage.xaml에서 btnLoad 버튼을 두 번 클릭하여 클릭 이벤트에 대한 이벤트 처리기를 추가합니다. MainPage.xaml.cs 파일이 열립니다.

  3. MainPage.xaml.cs 파일에서 btnLoad_Click 메서드를 다음 코드로 바꿉니다. 이 코드 내에서 [Application Name]을 프로젝트 이름으로 바꿉니다. 예를 들어 프로젝트 이름이 CameraDecode이고 이미지 이름이 TestImage.jpg이면 새 Uri에 대한 매개 변수는 "CameraEncode;component/TestImage.jpg"여야 합니다.

    private void btnLoad_Click(object sender, RoutedEventArgs e)
            {
                // Create a stream for the JPEG file and assign it to StreamResourceInfo.
                // For [Application Name] in the URI, use the project name you entered in the previous steps.
                StreamResourceInfo sri = null;
                Uri jpegUri = new Uri("[Application Name];component/TestImage.jpg", UriKind.Relative);
                sri = Application.GetResourceStream(jpegUri);
    
    
                // Decode the JPEG stream.
                WriteableBitmap myBitmap = PictureDecoder.DecodeJpeg(sri.Stream);
    
    
                // Add WriteableBitmap object to image control.
                image1.Source = myBitmap;
             
            }
    
  4. 디버그 | 디버깅 시작 메뉴 명령을 선택하여 응용프로그램을 실행합니다. 에뮬레이터 창이 열리고 응용프로그램이 시작됩니다. 로드 버튼을 누르면 Image 컨트롤에 쓰기 가능 비트맵이 표시됩니다.

AP_Con_DecodeSan

표시:
© 2014 Microsoft