如何为 Windows Phone 解码 JPEG

2012/2/9

本节介绍如何将您应用程序中的 JPEG 文件解码为 WriteableBitmap 对象。这样做的一个原因是为您的应用程序提供修改或编辑图片的功能。将执行以下任务:

  • 添加相应的命名空间并为示例创建设计图面

  • 为应用程序中的 JPEG 文件创建 URI 和流

  • 使用 DecodeJpeg(Stream) 方法将 JPEG 文件解码为 WriteableBitmap 对象。

以下过程中的步骤用于 Visual Studio 2010 Express for Windows Phone。 当您使用用于 Visual Studio 2010 Professional 或 Visual Studio 2010 Ultimate 的插件时,您可能会看到菜单命令或窗口布局中的一些微小改变。  本主题基于 C# 开发;但也提供 Visual Basic 代码。 

若要开始,您需要创建一个新项目并添加所需的命名空间。

创建新项目并添加命名空间

  1. 在 Visual Studio 2010 Express for Windows Phone 中,通过选择“文件 | 新建项目”菜单命令创建一个新项目。

  2. 将显示“新建项目”窗口。展开“Visual C#”模板,然后选择“Silverlight for Windows Phone”模板。

  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 中,将名为 LayoutRootGrid 替换为以下代码。

        <!--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>
    
    
    注意注意:

    该代码将创建一个图像控件(该控件将占用页面的顶部到中部的部分)和一个名为 btnLoad 的按钮控件。这些控件的方向如下图所示。

在本节中,您将向 btnLoad 单击事件处理程序中添加用来将 JPEG 文件解码为 WriteableBitmap 对象的代码。此过程需要为将添加到项目的 JPEG 文件创建一个流,将 JPEG 流解码为 WriteableBitmap 对象以及通过图像控件查看输出。

将 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. 通过选择“调试 | 启动调试”菜单命令运行应用程序。这将打开模拟器窗口并启动该应用程序。当您选择“加载”按钮时,这个可写位图应该在图像控件中变为可见。

AP_Con_DecodeSan

显示: