歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 使用 Nokia Imaging SDK 開發有濾鏡功能的 Windows Phone 8 應用

使用 Nokia Imaging SDK 開發有濾鏡功能的 Windows Phone 8 應用

日期:2017/3/1 9:53:49   编辑:Linux編程

說到濾鏡應用,相信很多數開發者都對照片特效的經驗都十分有限,通常都是去找一些三方的類庫進行學習或移植,今天在這裡給大家介紹下 Nokia 的 Imaging SDK, 相信大家對Nokia的自家圖像軟件有所了解, 各種效果非常齊全再加上超級屌的PureView攝像頭效果非常牛, 其實Nokia 自家的圖形軟件使用了很多Scalado的圖形圖像算法, 現在Nokia 共享出來了一部分API來實惠廣大的WP8開發者, 今天我為大家介紹下這些API的使用方法.

首先安裝Nokia Imaging SDK非常簡單只需通過 Visual Studio 中的NuGet即可

右鍵點擊你的目標項目 - 在菜單欄中選擇 Mange NuGet Packages

隨後搜索 nokia imaging SKD 安裝到項目即可

隨後可以看到你的項目會多出Nokia imaging 的引用

隨後我這裡引用Nokia 的一篇文檔以及demo給大家展示一下

首先我們先建立一個WP8 的 C#項目隨後對代碼進行一些修改

XMAL文件 (MainPage.xaml)

1. 橫屏的支持

SupportedOrientations="Landscape" Orientation="Landscape"

2. 根節點替換

<!--LayoutRoot is the root grid where all page content is placed-->
<Canvas x:Name="LayoutRoot" Background="Transparent">

    <TextBlock Text="Nokia Imaging SDK"  />
    <Image x:Name="CartoonImage" Height="480" Width="800" Stretch="UniformToFill" />
    <Image x:Name="OriginalImage" Height="100" Width="157" Stretch="UniformToFill"  Canvas.Left="24" Canvas.Top="70" Canvas.ZIndex="0"/>
    <Button Content="Pick an image" Click="PickAnImageButton_Click" Canvas.Left="24" Canvas.Top="398" />
    <Button Content="Save the image" Click="SaveImage_Click" x:Name="SaveButton" Canvas.Left="569" Canvas.Top="398" />

</Canvas>

這裡看到 使用了兩個 Img控件一個用來分別顯示 原圖和使用濾鏡效果後的效果圖。

另外兩個按鈕 一個是啟動選擇器從相冊中選擇一張圖片進行濾鏡渲染,另外一個按鈕是用作保存圖片的。

C#文件(MainPage.xaml.cs)

1. 需要使用的命名空間

using Nokia.Graphics.Imaging; 
using System.Runtime.InteropServices.WindowsRuntime; 
using Microsoft.Phone.Tasks; 
using Windows.Storage.Streams; 
using Microsoft.Xna.Framework.Media;

2. 需要使用的變量

public partial class MainPage : PhoneApplicationPage

{

private EditingSession _session;

3. 按鈕處理事件

private void PickAnImageButton_Click(object sender, RoutedEventArgs e) 
{ 
    PhotoChooserTask chooser = new PhotoChooserTask(); 
    chooser.Completed += PickImageCallback; 
    chooser.Show(); 
}

private async void PickImageCallback(Object sender, PhotoResult e) 
{ 
    if (e.TaskResult != TaskResult.OK) 
    { 
        return; 
    } 
    _session = await EditingSessionFactory.CreateEditingSessionAsync(e.ChosenPhoto); 
    try 
    { 
        // Decode the jpeg for showing the original image 
        await _session.RenderToImageAsync(OriginalImage, OutputOption.PreserveAspectRatio); 
        // Apply the filter and decode into the bitmap. 
        _session.AddFilter(FilterFactory.CreateCartoonFilter(true)); 
        await _session.RenderToImageAsync(CartoonImage, OutputOption.PreserveAspectRatio); 
    } 
    catch (Exception exception) 
    { 
        MessageBox.Show("Exception:" + exception.Message); 
        return; 
    } 
    SaveButton.IsEnabled = true; 
}

private async void SaveImage_Click(object sender, RoutedEventArgs e) 
{ 
    if (_session == null) 
    { 
        return; 
    } 
    // The image has been already filtered. 
    // We only need to render the output as a jpeg 
    IBuffer jpegOut = await _session.RenderToJpegAsync(); 
    // Save the image as a jpeg to the camera roll 
    MediaLibrary library = new MediaLibrary(); 
    string filename = "SavedPicture_" + DateTime.Now.ToString("G"); 
    Picture pic = library.SavePicture(filename, jpegOut.AsStream()); 
    MessageBox.Show("Image saved"); 
}

這裡注意下 _session.AddFilter(FilterFactory.CreateCartoonFilter(true)); 是向 EditingSession 添加濾鏡效果並通過 await _session.RenderToImageAsync(CartoonImage, OutputOption.PreserveAspectRatio); 將含有濾鏡效果的圖片顯示出來。

另外可以使用 await _session.RenderToJpegAsync(); 將圖片轉換成JPG保存起來。

這套SDK還提供了N多種濾鏡效果。

另外 Nokia 還提供了多個DEMO包括實時的濾鏡效果。

希望上的總結可以幫助到大家, 同時歡迎大家在這裡和我溝通交流或者在新浪微博上 @王博_Nick

Channel 9 視頻資料

Real-time Filter Demo

Filter Explorer

Filter Effects

升級到WP8必需知道的13個特性 系列文章目錄地址:http://www.linuxidc.com/Linux/2013-08/89003.htm

Copyright © Linux教程網 All Rights Reserved