×
Namespaces

Variants
Actions
Revision as of 08:26, 30 November 2012 by hamishwillee (Talk | contribs)

扩展图片hub

From Nokia Developer Wiki
Jump to: navigation, search
WP Metro Icon Multimedia.png
SignpostIcon XAML 40.png
SignpostIcon WP7 70px.png
Article Metadata

兼容于
文章
翻译:
WS - OtomiiLu
最后由 hamishwillee 在 30 Nov 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扩展

88 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×