Lens 翻譯過來其實就是濾鏡透鏡的意思,在Windows phone 8 中使用快門按鈕的時候可以啟動相機功能,相機的AppBar 中可以看到一個Lens按鈕。這是一種應用的全新體驗的方式,我個人就很喜歡這種方式開啟相機十分方便,並且在預設相機中就可以選擇目標應用的濾鏡效果 這樣做十分有效提升了使用者體驗,而這使用者體驗是Windows phone平台所特有的,也為更多的lens應用提供了更多的程式入口。
此文是 升級到WP8必需知道的13個特性 系列的一個更新 希望這個系列可以給 Windows Phone 8開發人員帶來一些開發上的便利。
同時歡迎大家在這裡和我溝通交流或者在新浪微博上 @王博_Nick
是啟動相機後 顯示在AppBar中的Lins 按鈕。
是一個使用lens的應用的體驗流程。
首先如果你的應用是要進行拍攝以及儲存照片到相簿一定要在WMAppManifest中聲明使用鏡頭和相簿媒體庫存取權限。
另外並不是選了以上兩個Item你的應用就可以顯示在Lens picker中 需要你進行鏡頭的延伸註冊 需要修改WMAppManifest檔案但是這次是要進行開啟編輯加入以下代碼:
<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 image control source. // To retrieve a full-resolution image, use the GetImage() method instead. BitmapImage bitmapFromPhoto = new BitmapImage(); bitmapFromPhoto.SetSource(photoFromLibrary.GetPreviewImage()); image1.Source = bitmapFromPhoto; }}
deep link的方法之前已經介紹過了相信大家已經不想再聽我囉嗦了 再次給出參考串連吧
參考 windows phone 8 中的應用間通訊
MSDN:http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj662942(v=vs.105).aspx
看到這裡相信大家對Lens APP有了一定的瞭解趕快動手試試吧,歡迎大家在這裡和我溝通交流或者在新浪微博上 @王博_Nick