说到滤镜应用,相信很多数开发者都对照片特效的经验都十分有限,通常都是去找一些三方的类库进行学习或移植,今天在这里给大家介绍下 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" Style="{StaticResource PhoneTextNormalStyle}" />
<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

使用 Nokia Imaging SDK 开发有滤镜功能的 Windows Phone 8 应用的更多相关文章

  1. Nokia Imaging SDK 的高级使用—实时滤镜拍照

    有关 Nokia Imaging SDK 的初级使用,可以参考:Nokia Imaging SDK滤镜使用入门 本文的主题: 1.如何 PhotoCaptureDevice 类使用,以及如何在 Med ...

  2. Nokia Imaging SDK滤镜使用入门

    简要说明: 通过对示例图片分别运用 LomoFilter和SketchFilter两个滤镜(Nokia Imaging SDK 内置), 来学习滤镜的基本使用和参数的设置.本工程的代码量比较少,也很容 ...

  3. Nokia Imaging SDK

    Nokia Imaging SDK 目前为 beta 版本,是诺基亚在自己的图像应用中使用的技术同时提供给开发者 使用.这是一个运行在手机设备上处理图片数据的高效的类库.功能包括 JEPG 图片的编码 ...

  4. android-使用环信SDK开发即时通信功能及源代码下载

    近期项目中集成即时聊天功能.挑来拣去,终于选择环信SDK来进行开发,选择环信的主要原因是接口方便.简洁.说明文档清楚易懂.文档有android.ios.和后台server端.还是非常全的. 环信官网: ...

  5. Kinect for Windows SDK开发入门(15):进阶指引 下

    Kinect for Windows SDK开发入门(十五):进阶指引 下 上一篇文章介绍了Kinect for Windows SDK进阶开发需要了解的一些内容,包括影像处理Coding4Fun K ...

  6. FFMPEG SDK 开发介绍(原创)

    来源:http://blog.sina.com.cn/s/blog_62a8419a01016exv.html 本文是作者在使用ffmpeg sdk开发过程中的实际经验,现在与大家分享,欢迎学习交流. ...

  7. Kinect for Windows SDK开发学习相关资源

    Kinect for Windows SDK(K4W)将Kinect的体感操作带到了平常的应用学习中,提供了一种不同于传统的鼠标,键盘及触摸的无接触的交互方式,在某种程度上实现了自然交互界面的理想,即 ...

  8. IOS开发之支付功能概述

    前言:本随笔将对IOS开发的支付功能进行一个概述. 内容大纲: 一.常见的支付方案简介 二.第三方支付SDK 三.苹果官方支付方案 四.Web支付方案 正文: 一.常见的支付方案简介 在微信支付中 微 ...

  9. 微信公众账号 Senparc.Weixin.MP SDK 开发教程 索引

    Senparc.Weixin.MP SDK从一开始就坚持开源的状态,这个过程中得到了许多朋友的认可和支持. 目前SDK已经达到比较稳定的版本,这个过程中我觉得有必要整理一些思路和经验,和大家一起分享. ...

随机推荐

  1. ubuntu16.04 eclipse+pydev 配置

    参考:http://blog.csdn.net/bluish_white/article/details/56509446,http://blog.csdn.net/qing101hua/articl ...

  2. 一个脚本和一个容易疏忽的问题strcmp、strncmp、memcmp的用法【原创】

    一个容易疏忽的问题: strcmp.strncmp.memcmp, 对于memcmp进行字符串比较时可能会出现内存重叠的情况 status = strncmp(xdev->product, &q ...

  3. Callable和futrue、ExecutorService的用法

    首先说明是为了解决什么问题? 为了解决主线程无谓等待浪费服务器资源的问题.当主线程执行一个费时的操作时,比如客户端发起一个请求,该请求在服务器端处理很复杂,如需要调用其他系统的接口,总之比较耗时.这时 ...

  4. CAS和AQS

    一.CAS CAS(Compare And Swap),即比较并交换.是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(V).预期原值(A)和新值(B).如果内 ...

  5. HDU 6215 2017Brute Force Sorting 青岛网络赛 队列加链表模拟

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6215 题意:给你长度为n的数组,定义已经排列过的串为:相邻两项a[i],a[i+1],满足a[i]&l ...

  6. vue总结 08状态管理vuex

      状态管理 类 Flux 状态管理的官方实现 由于状态零散地分布在许多组件和组件之间的交互中,大型应用复杂度也经常逐渐增长.为了解决这个问题,Vue 提供 vuex:我们有受到 Elm 启发的状态管 ...

  7. day03作业

    ---恢复内容开始--- 1.+.-.*./.%.++.-- ①正号:②加法运算:③连接符 除法是两个数相除所得的结果,取余是除法操作的余数. ++前置表示现将一个数自加然后进行赋值,++后置表示先赋 ...

  8. UFLDL(五)自编码算法与稀疏性

    新教程内容太繁复,有空再看看,这节看的还是老教程: http://ufldl.stanford.edu/wiki/index.php/%E8%87%AA%E7%BC%96%E7%A0%81%E7%AE ...

  9. Codeforces 981D Bookshelves(按位贪心+二维DP)

    题目链接:http://codeforces.com/contest/981/problem/D 题目大意:给你n本书以及每本书的价值,现在让你把n本书放到k个书架上(只有连续的几本书可以放到一个书架 ...

  10. Linux 命令find、grep

    本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 find命令的一般形式 find命令的常用选项及实例 find与xar ...