昨晚老大讓祖哥交給我一個任務- - 去研究一下Nokia Imaging Sdk...
這個就有一段淵源了……(艹
諾基亞在2012年7月24日收購了一家瑞典德隆(Lund)的公司,名叫Scalado,聽起來很吊的樣子。這個公司主要給一些圖像公司做支持,做codec,並且自己有許多專利。其中一個叫做 RAJPEG(random access jpeg),主要就是通過維護SPMO使得整個圖片被分解成許多塊,方便操作,在使用濾鏡的時候可以在不解碼其他不需要的塊的時候更高效地操作所需區域。並且號稱能減少20倍內存消耗,圖像處理速度增加10倍(這麼碉堡的效率我們隨便“哇”一下就行了)。大家有興趣的話可以去Scalado的網站看一下E文,FYI。
今天我想寫的就是一些自己總結粗來的乾貨,如果能幫助到大家那最好。
1. License問題
First of all, 如果你要做一個很碉堡的應用準備和各大手機廠商合作,這個sdk是不能隨便亂用滴。
一 〉在License裏明確規定不能在非Nokia手機中內置或預裝使用此sdk的軟件。
二 〉 你的軟件只能出現在Nokia手機的Nokia 精選(collection)中,不能被別的品牌手機推廣。
三 〉 這個鬆一點,就是在Nokia手機上,你的軟件的功能至少要和在其他品牌手機上的功能一樣,當然,多了最好~
四 〉 小Tip,在你的軟件裏得加上幾句話表示你用了Nokia Imaging Sdk的技術,還有copyright啥的,大家可以去看License Agreement
2.安裝
Step 1:添加DLL
這個有兩種方法~
第一種 〉從Nokia Imaging Sdk中下載msi安裝文件,然後安裝。裝完之後要用了是不,新建一個項目或者打開你原來的wp項目,添加引用,放心這裏找不到的,我們得“瀏覽”一下,然後找到系統盤的ProgramFiles(x86)->Nokia->NokiaInagingsdk->NokiaImagingsdklibs
先把那個啥啥啥managed.dll添加進來,然後再瀏覽到ARM裏找到兩個winmd文件(功能類似於dll但是能起到跨語言的功能,微軟推薦使用),添加進去!
第二種 〉點擊工具->庫程序包管理器->管理解決方案的nuget程序包->搜索nokia imaging sdk->安裝,然後dll就進去了。這個要注意的是你的nuget版本必須>=2.5 還有一點要提的,有的朋友在安裝之後,dll裏只添加了一個managed.dll(其實應該是三個嘛),不要急,先往下配置。
Step 2:現在要設置一下項目的配置。點擊生成->配置管理器,然後赫然看到一個Any Cpu出現在右上角的下拉框裏。拉它,選擇編輯,選擇AnyCpu,選擇移除!完事!
Step 3:根據Nokia官方的文檔呢,得去該csproj文件,然後各種倒騰,不過前幾天在開發者論壇裏有一位大神名叫 PedroQ發明(- -?)了一種新方法:重啓Visual Studio. 完事= = 而且重啓之後,在Step1的第二種方法中沒有添加進去的dll也進去了!Kudos PedroQ~!
3.使用
好了現在應該可以使用了(還不能的話God Bless U)。那要怎麼使用呢?
Step 1:創建EditingSession
EditingSession es = await EditingSessionFactory.CreateEditingSessionAsync(Stream)
或者es = new EditingSession()啥的,大家都能搞定。
Step 2:添加Filter
其實這個Sdk裏的濾鏡是比較碉堡的,一共有52種。可以用這種方法添加:
es.AddFilter(FilterFactory.CreateCropFilter(new Rect(300, 300, 500, 500)));
FilterFactory裏有各種濾鏡,大家盡情玩~ 也可以去看看Nokia的示例 還有一個FilterGroup大家也可以玩玩
Step 3:保存到
可以保存到一個Image空間,保存到JPEG文件,保存到writeablebitmap等等,大家只要
es.RenderTo。。。就會粗來啦
另外說一下我自己用這個sdk的感受。其實我們Team本來是因爲writeablebitmapex這個庫有一些性能缺陷,想找一個alternation,就研究了一下Nokia imaging sdk。
但是在寫了幾個demo之後發現,雖然在內存消耗方面有所減少,但是耗時增加而且圖片的質量其實不算太高。這個在讀取項目裏的資源時沒有明顯差別,但是當拍攝照片的時候,一般ex的消耗是sdk的2-3倍。我又進行了一些crop和resize的操作,也是同樣的問題,圖片質量不高。
當然有可能是我測試或設置的方法不對。如果大家有什麼意見建議的話,盡情斧正!謝謝!