Namespaces
Variants
Actions
Revision as of 05:04, 27 August 2012 by hamishwillee (Talk | contribs)

扩展图片hub

Jump to: navigation, search
WP Metro Icon Chinese.png
文章信息

文章
翻译:
最后由 hamishwillee 在 27 Aug 2012 编辑

本文介绍了如何扩展你的应用程序中图片Hub。

Contents

图片Hub的开源应用程序

第一种方法是引用你的应用程序作为图片应用程序。要做到这点,打开WMAppManifest.xml,添加after Tokens node

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

图片Hub的开源图

第二种方法是引用你的应用程序作为图片查看器。当用户查看一张图片它可选择一个应用程序的菜单栏来打开这张图片。 要做到这点,打开WMAppManifest.xml,添加after Tokens node

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

在你的代码中,重写OnNavigatedTo()函数。当你的应用程序从图片hub启动时,token被添加到NavigationContext.QueryString中。此token被用来获取一个Pictureinstance。

using Microsoft.Xna.Framework.Media;
using System.Windows.Navigation;
using System.IO;
 
//...
 
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
IDictionary<string, string> queryStrings = this.NavigationContext.QueryString;
//检查一个token是否已被添加
if (queryStrings.ContainsKey("token"))
{
MediaLibrary library = new MediaLibrary();
//从token中访问Picture instance
Picture picture = library.GetPictureFromToken(queryStrings["token"]);
 
//获取图片流
Stream imageStream = picture.GetImage()
 
/*Todo 打开并显示图片的代码
...
*/

queryStrings.Remove("token");
 
}
base.OnNavigatedTo(e);
}

同样,我们会遇到问题

当然这个不是那么简单的。BitmapImage加载图片时,它并不检查图片的方向。在Lumia 800(或许所有的WP7)一个纵向图片可能会被加载成一个横向图片。所以你必须手动检查方向。为此你可以使用ExifLib库读取exif图片数据和图片方向。 现在你可以简单的实现更正图片显示。

<Image x:Name="imageViewer" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,150,0,0">
<Image.RenderTransform>
<RotateTransform x:Name="imageOrientation" />
</Image.RenderTransform>
</Image>
// 加载图片至一个BitmapImage
BitmapImage bitmap = new BitmapImage();
bitmap.CreateOptions = BitmapCreateOptions.None;
bitmap.SetSource(imageStream);
 
// 显示已加载图片
imageViewer.Source = bitmap;
imageOrientation.Angle = 0;
 
 
// 重置流至起始处
imageStream.Seek(0, SeekOrigin.Begin);
// 读取exif数据
JpegInfo info = ExifLib.ExifReader.ReadJpeg(imageStream, "");
 
if ( info.Orientation == ExifOrientation.TopRight)
{
imageOrientation.Angle = 90;
}
if (info.Orientation == ExifOrientation.BottomRight)
{
imageOrientation.Angle = 180;
}
if (info.Orientation == ExifOrientation.BottomLeft)
{
imageOrientation.Angle = -90;
}

分享图片Hub中图片

最后一种可能性是引用你的应用程序作为一个“图片分享器”。 打开WMAppManifest.xml,添加after Tokens node

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

在你的代码中,重写OnNavigatedTo()方法。当你的应用程序从图片hub启动时,FileId被添加到NavigationContext.QueryString中。此token用来获取一个Pictureinstance

using Microsoft.Xna.Framework.Media;
using System.Windows.Navigation;
using System.IO;
 
//...
 
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
IDictionary<string, string> queryStrings = this.NavigationContext.QueryString;
// 检查一个token是否被添加 is added
if (queryStrings.ContainsKey("FileId"))
{
 
MediaLibrary library = new MediaLibrary();
//从token中访问Picture instance
Picture picture = library.GetPictureFromToken(queryStrings["FileId"]);
 
// 获取图片流
Stream imageStream = picture.GetImage()
 
/*Todo 你的代码
...
*/

queryStrings.Remove("FileId");
 
}
base.OnNavigatedTo(e);
}

引用链接

ExifLib

图片hub扩展

140 page views in the last 30 days.
Nokia Developer aims to help you create apps and publish them so you can connect with users around the world.

京ICP备05048969号  © Copyright Nokia 2013 All rights reserved