×
Namespaces

Variants
Actions

(译)Nokia Imaging SDK — 核心原则

From Nokia Developer Wiki
Jump to: navigation, search

本文为翻译内容,原文链接在底部

SignpostIcon XAML 40.png
WP Metro Icon WP8.png
Article Metadata

测试基于
SDK: Windows Phone 8.0 SDK, Nokia Imaging SDK Beta 1

兼容于
文章
段博琼 在 11 Oct 2013 创建
最后由 hamishwillee 在 17 Oct 2013 编辑

Contents

简介

Nokia Imaging SDK 是一个 Windows Phone Runtime library 的类库。其中的一个好处就是可以使用C#、VB 或者 C++ 调用其中的方法。关于更多关于 Windows Phone 运行时的信息可以参考 Windows Phone API reference (MSDN).

这个 EditingSession 对象是这个类库的核心。每次原图片的更改都需要创建一个新的 editing-session 对象, 并且对于需要处理的原图片最好要尽可能长时间的使 editing-session 保持打开来提高性能。一个 session 的使用通常有以下步骤:

1、为一张图片创建 editing-session 对象 2、为这个 session 添加一个或多个 filters 和 effects 3、这个 editing-session 被生成到一个 bitmap 或者 一个 memory buffer 中 4、根据需求可以重复操作步骤2 和 步骤3 5、关闭 editing-session

通常的关于 editing-session 的代码像下面:

using Nokia.Graphics.Imaging;
 
using (EditingSession editsession = new EditingSession(inputBuffer))
{
// First add an antique effect
editsession.AddFilter(
FilterFactory.CreateAntiqueFilter());
 
// Then rotate the image
editsession.AddFilter(
FilterFactory.CreateFreeRotationFilter(35.0f, RotationScaleMode.FitInside)
);
 
// Add more filters here if you want...
 
// Finally, execute the filtering and render to a bitmap
await editsession.RenderToBitmapAsync(outputBuffer);
}

在这段示例代码中,我们首先用包含原图的 inputBuffer 创建这个 editing-session 对象,然后对这个 editing-session 对象添加一个 古铜色的效果,再旋转 35度。经过滤镜处理后的图片就被生成到 outputBuffer 对象中。

[[File:NokiaImagingSDK filters.jpg]


非常的简单!我们看一下创建的 inputBuffer 和 outputBuffer ,SDK 可以接受的 image 可以是 多种类型,包括 JPEG,GIF 和 bitmap。同时输出的格式可以是一个 JPEG buffer 或者一个 bitmap

对于输入和输出的 buffers,这个 SDK 使用它自己的 buffer 类:Nokia.Graphics.Imaging.Bitmap。 虽然开发者可以使用这个 class,这个 SDK 也提供了 helper functions 来抽象这个缓冲区类。


创建 EditingSession

在创建一个 editing-session 对象时,需要体用一个源 image。开发者可以选择使用 encoded data(更小的内存 占用)或者使用一个 bitmap,根据需要选择合适的。EditingSession 类提供了下面三种构造函数:

public EditingSession(Nokia.Graphics.Imaging.Bitmap bitmap);
public EditingSession(IBuffer buffer) ;
public Session(IBuffer buffer, InputImageFormat format);


public EditingSession(IBuffer buffer, InputImageFormat format)

当读取被编辑的图片文件时,使用这个构造函数。提供的 buffer 通常包含压缩数据(JPEG) 并且可能包含这些像素值的额外信息。

虽然 IBuffer 是 Windows Phone Runtime 内置的类型,但是在 C# 程序中并不常见。 在 C# 程序中,可以使用下面的代码把 MemoryStream 转换成一个 IBuffer:


using System.Runtime.InteropServices.WindowsRuntime;
MemoryStream jpegInMemory = new MemoryStream();
// Add your code to load some data into the jpegInMemory buffer...
 
// now convert to an IBuffer
IBuffer jpegData = jpegInMemory.GetWindowsRuntimeBuffer();
using (EditingSession editsession = new EditingSession(jpegData))


public EditingSession(Nokia.Graphics.Imaging.Bitmap bitmap)

当被编辑的图片是一个 bitmap 使用这个构造函数。最频繁使用的构造 editing-session 的方式 是使用包含一张图片数据的System.Windows.Media.Imaging.WriteableBitmap。同时 SDK 提供了一个帮助方法 把 WriteableBitmap 转换成一个 Nokia.Graphics.imaging.Bitmap。

别忘了添加 命名空间 Nokia.InteropServices.WindowsRuntime

WriteableBitmap myBitmap = new WriteableBitmap(width, height);
// Add your code to load some data into myBitmap
 
// now convert to an Nokia.Ipp.Base.Bitmap
Nokia.Graphics.Imaging.Bitmap nokiaBitmap = myBitmap.AsBitmap();
using (EditingSession editsession = new EditingSession(nokiaBitmap))

渲染图片到一个缓冲区

在渲染阶段,图片的 effects 应用到了 session 然后生成了最终的图片。开发者可以选择 生成图片的格式为 JPEG 或者 一个 bitmap。SDK 提供了两种生成图片的方法。

   Public IAsyncAction RenderToBitmapAsync(Bitmap renderTarget);

当把输出的图片呈现到屏幕上 或者 获得这个包含图片数据的 buffer 用来做进一步的处理时 可以使用这个方法。在调用方法前,需要用图片的 desired size 初始化生成的目标。

下面是通常如何首先使用 SDK 进行处理,然后显示到 XAML 中的 Image 控件上:

private System.Windows.Controls.Image myImage; // An XAML Image control
 
public async void RenderToScreen ()
{
// Create the output bitmap
WriteableBitmap myOutputBitmap = new WriteableBitmap(width, height);
 
// Hook up the WriteableBitmap to a XAML Image control
myImage.Source = myOutputBitmap;
 
// Render the image to the bitmap
using (EditingSession editsession = new EditingSession(foo))
{
await editsession.RenderToBitmapAsync(myOutputBitmap.AsBitmap());
}
 
// Request a redraw
myOutputBitmap.Invalidate();
}


Public IAsyncOperation<IBuffer> RenderToJpegAsync();

当输出的类型是 JPEG 的时候可以使用这个方法。这个方法为 buffer 分配所需的内存。

// Render the image as a JPEG
using (EditingSession editsession = new EditingSession(foo))
{
IBuffer finalJpeg = await editsession.RenderToJpegAsync();
}


裁切

当涉及渲染命令时,开发者可以指定图片裁切的区域,并且只有该区域会使用 effecet。这种 方式在放大一个 JPEG 的时候非常有用。

例如,下面的图片应用了一个 filter effect。开发者只想显示图片的一部分,所以使用了 zooming:

using (EditingSession editsession = new EditingSession(jpegData))
{
editsession.AddFilter(FilterFactory.CreateAntiqueFilter());
await editsession.RenderToBitmapAsync(cartoonBitmap.AsBitmap(),
OutputOption.PreserveAspectRatio, //保持长宽比
new Windows.Foundation.Rect(200.0, 400.0, 500.0, 500.0));
 
cartoonBitmap.Invalidate();
}


这个类库只会编码图片裁剪的区域,然后添加 古铜色 effect: F52f209d183.jpg

类库

在使用 Nokia Imaging SDK 提供的方法前,必须把 SDK 的类库添加到项目中。两种添加的方法:

使用 Visual Studio NuGet package manager ,或者直接添加到工程的引用。更多信息:Download and add the libraries to the project.


Nokia WiKi 原文链接http://developer.nokia.com/Resources/Library/Lumia/#!nokia-imaging-sdk/core-concepts.html

Version Hint

Windows Phone: [[Category:Windows Phone]]
[[Category:Windows Phone 7.5]]
[[Category:Windows Phone 8]]

Nokia Asha: [[Category:Nokia Asha]]
[[Category:Nokia Asha Platform 1.0]]

Series 40: [[Category:Series 40]]
[[Category:Series 40 1st Edition]] [[Category:Series 40 2nd Edition]]
[[Category:Series 40 3rd Edition (initial release)]] [[Category:Series 40 3rd Edition FP1]] [[Category:Series 40 3rd Edition FP2]]
[[Category:Series 40 5th Edition (initial release)]] [[Category:Series 40 5th Edition FP1]]
[[Category:Series 40 6th Edition (initial release)]] [[Category:Series 40 6th Edition FP1]] [[Category:Series 40 Developer Platform 1.0]] [[Category:Series 40 Developer Platform 1.1]] [[Category:Series 40 Developer Platform 2.0]]

Symbian: [[Category:Symbian]]
[[Category:S60 1st Edition]] [[Category:S60 2nd Edition (initial release)]] [[Category:S60 2nd Edition FP1]] [[Category:S60 2nd Edition FP2]] [[Category:S60 2nd Edition FP3]]
[[Category:S60 3rd Edition (initial release)]] [[Category:S60 3rd Edition FP1]] [[Category:S60 3rd Edition FP2]]
[[Category:S60 5th Edition]]
[[Category:Symbian^3]] [[Category:Symbian Anna]] [[Category:Nokia Belle]]

This page was last modified on 17 October 2013, at 00:44.
140 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×