Lens 翻譯過來其實就是濾鏡透鏡的意思,在Windows phone 8 中使用快門按鈕的時候可以啟動相機功能,相機的AppBar 中可以看到一個Lens按鈕。這是一種應用的全新體驗的方式,我個人就很喜歡這種方式打開相機十分友善,并且在預設相機中就可以選擇目标應用的濾鏡效果 這樣做十分有效的提升了使用者體驗,而這使用者體驗是Windows phone平台所特有的,也為更多的lens應用提供了更多的程式入口。
此文是 更新到WP8必需知道的13個特性 系列的一個更新 希望這個系列可以給 Windows Phone 8開發者帶來一些開發上的便利。
同時歡迎大家在這裡和我溝通交流或者在新浪微網誌上 @王博_Nick
下圖是啟動相機後 顯示在AppBar中的Lins 按鈕。

- <Extension ExtensionName="Camera_Capture_App"
- ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5631}"
- TaskID="_default" />
并且要緊跟在Token節點後
這樣在從新部署你的應用 在Lens picker中就可以看到你的應用了
從上圖可以看出來 隻有我的DEMO程式沒有圖示顯示看上去很不友好一定會被很多同學鄙視,當然我也是要設定一下預設選擇其中的圖示的,我們都知道WP8是支援3種分辨率的 是以在Lens picker中我們也需要三種的圖示尺寸來适應着三種分辨率
這裡有一個詳細的模闆說明提供下載下傳 包含PDF 和原始PSD檔案非常友好啊:Icon templates for Windows Phone 8
你這裡需要提供以上三種分辨率的圖示并且使用命名規範,并且放在 Assets檔案夾下 這樣你就可以看到你的應用在不同分辨率下 Lens picker中的Icon 這裡可以看到我偷懶就直接使用的SDK的圖示但是 效果已經有啦~
這裡我在啰嗦一句 如果你希望做出以下這種可以适應系統的顔色變化的效果 就用PNG透明圖檔即可。
點選Lens按鈕後會出現支援Lens API的所有應用清單 點選清單中的某一個應用圖示後會通過Deep Link的形式跳轉(打開)至目标應用。處理這種Deep Link的方法請參考 windows phone 8 中的應用間通信 也可以參考MSDN :http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj662936(v=vs.105).aspx
相信一般的提供濾鏡的應用都提供了 圖檔編輯的功能,各種效果 特效過後讓照片顯示的光鮮靓麗,當然在照片庫中可以使用一個入口連接配接将照片送入一個 lens 應用中去進行編輯
從上圖中可以看到這張圖檔是從一個LensAPP儲存的并且可以使用該App打開這張圖檔 下面我介紹一下如何實作此功能
首先你的圖檔是通過你的LensAPP儲存的,之後會就在相app bar 中的item中就會直接出現Open Link
- MediaLibrary library = new MediaLibrary();
- string lName = GeneratePhotoName();
- var myStore = IsolatedStorageFile.GetUserStoreForApplication();
- if (myStore.FileExists(lName))
- {
- MessageBox.Show("圖檔已經存在");
- }
- else
- {
- Picture newPicture = this.mediaLibrary.SavePictureToCameraRoll(lName, e.ChosenPhoto);
- MessageBox.Show("儲存成功!", "提示", MessageBoxButton.OK);
聲明媒體拓展功能也需要在WMAppManifest 檔案中注冊聲明
- <Extension ExtensionName="Photos_Rich_Media_Edit"
- ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}"
- TaskID="_default" />
同樣也是需要在緊跟Token節點 在Extension中加入此節點
從open link中拿到圖檔的方法 也很簡單的 利用的就是應用間Share檔案的方法,
- 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 "token" key is present.
- if (queryStrings.ContainsKey("token"))
- {
- // Retrieve the photo from the media library using the token passed to the app.
- MediaLibrary library = new MediaLibrary();
- Picture photoFromLibrary = library.GetPictureFromToken(queryStrings["token"]);
- // Create a BitmapImage object and add set it as the p_w_picpath control source.
- // To retrieve a full-resolution p_w_picpath, use the GetImage() method instead.
- BitmapImage bitmapFromPhoto = new BitmapImage();
- bitmapFromPhoto.SetSource(photoFromLibrary.GetPreviewImage());
- p_w_picpath1.Source = bitmapFromPhoto;
- }
- }
deep link的方法之前已經介紹過了相信大家已經不想再聽我啰嗦了 再次給出參考連接配接吧