Статьи

Начиная с Nokia Imaging SDK

Несколько недель назад Nokia анонсировала свой новый телефон Lumia, Lumia 1020 , который оснащен мощным 41-мегапиксельным сенсором камеры. позволяя снимать фотографии с невероятными деталями, или, как они выразились, «сначала снимай, а потом увеличивай» ( полагаю, кивает Литро ). Конечно, для такого типа зверя потребуются серьезные потребности в редактировании фотографий, сделанных этими объективами (точнее, в Lumia 1020 их 6), и, как это только что случилось, Nokia вчера также выпустила SDK для обработки изображений, который позволяет использовать Windows Phone (8). разработчики для создания приложений, которые манипулируют изображениями, применяя различные фильтры, изменяя размеры и т. д. SDK, который, если вы захотите, позволит вам разработать ваше следующее лучшее приложение для Instagram.

Что может сделать Nokia Imaging SDK?

Главной особенностью SDK являются более 50 фильтров изображений с настраиваемыми настройками, которые можно применять к любому изображению. Фильтры перечислены здесь . Помимо фильтров, есть API для управления изображениями, такими как изменение размера, обрезка и поворот.

Где я могу найти это?

Nokia Imaging SDK можно загрузить бесплатно здесь . SDK можно использовать бесплатно, но проверьте лицензию здесь . Вы можете пропустить форму входа издателя, нажав кнопку «Нет, спасибо», но если вы уже являетесь издателем Windows Phone, вы можете оставить свои данные издателя, чтобы увеличить вероятность того, что Nokia обнаружит ваше следующее замечательное приложение с их SDK для изображений.Улыбка

Установив SDK, вы получите локальную версию библиотек Nokia, а также демонстрационный / пример проекта.

Обратите внимание, что вы также можете полностью пропустить установку SDK вручную и использовать нужные библиотеки в существующих проектах через NuGet (всегда хороший вариант).

Как начать?

Если вы установили SDK через установщик, в пакет включен простой пример проекта (см. Папку Program Files (x86) \ Nokia \ Nokia Imaging SDK \ tutorial \ TutorialNokiaImagingSDK \ ImagingSDKTutorial ).

Если вы хотите больше образцов, Nokia предоставит вам покрытие. В настоящее время есть еще 3 примера проектов, которые можно загрузить со страницы примеров проектов :

1. Фильтр эффектов (скачать проект здесь ) позволяет применять различные фильтры к фотографиям

2. Filter Explorer (скачать проект здесь ) — довольно мощный редактор изображений с обширной галереей эффектов.

3. Демонстрация фильтра в реальном времени (загрузка проекта здесь ) показывает, как применять включенные эффекты к потоку камеры в реальном времени.

Руки вверх

Я создал новый проект Windows Phone 8 с нуля, используя установленные библиотеки. При добавлении ссылок необходимо выполнить некоторые шаги вручную, и я надеюсь, что они будут рассмотрены в следующих выпусках. Вы можете просмотреть эти шаги для ручной и NuGet установки здесь .

Что я хотел попробовать для этого поста, так это несколько простых задач: сделать фотографию, применить один из фотофильтров, обрезать изображение и сохранить его в библиотеке.

И реализовать их было довольно просто.

Во-первых, вот несколько XAML:

<Grid Background="Transparent"
      Tap="OnChangePhoto">
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Image x:Name="Source"
           Width="480"
           Height="400" />
    <Image x:Name="Altered"
           Width="480"
           Height="400"
           Grid.Row="1" />
</Grid>

Это в основном изображения, накладываемые на страницу, каждый из которых имеет явный размер (подробнее об этом позже). Я хочу, чтобы «Исходное» изображение отображало неизмененное, необработанное захваченное фото, а «Измененное» — отображенное измененное изображение.

Код тоже прост. Захват фото:

var task = new CameraCaptureTask();
task.Completed += OnCapture;
task.Show();

Теперь мы перейдем к более захватывающим вещам. В основе Nokia Imaging SDK лежит класс EditingSession, который принимает либо класс Bitmap в качестве конструктора, либо реализацию IBuffer. И поскольку мы читаем из захваченного потока, IBuffer кажется более подходящим:

Windows.Storage.Streams.IBuffer buffer;
using (var stream = new MemoryStream())
{
    await e.ChosenPhoto.CopyToAsync(stream);
    buffer = stream.GetWindowsRuntimeBuffer();
}

Как только мы получим буфер, мы можем начать сеанс редактирования:

using (var session = new EditingSession(buffer))
{

За исключением всего, что вы делаете в этом занятии, не обязательно относится к «редактированию». Например, есть вспомогательный метод, который устанавливает источник изображения в одном выражении:

await session.RenderToImageAsync(Source, OutputOption.PreserveAspectRatio);

Только не забудьте установить начальный размер изображения (см. Фрагмент XAML выше). Метод сгенерирует исключение, если начальный размер не установлен.

Исходное изображение отображается, время для фильтров!

session.AddFilter(FilterFactory.CreateLomoFilter(.5, .5, LomoVignetting.High, LomoStyle.Neutral));

Каждый фильтр создается через Filter Factory и имеет различные параметры, которые вы можете установить. Фильтры — это не только художественные манипуляции, которые вы можете добавить к фотографии, но также есть фильтры для зеркального отражения, переворачивания или поворота, чтобы назвать несколько. Вот как вы применяете фильтр обрезки, который немного обрезает края фотографий. Сначала вычислите прямоугольник обрезки и используйте его в качестве параметра:

var width = session.Dimensions.Width;
var height = session.Dimensions.Height;
var rect = new Windows.Foundation.Rect(width * .1, height * .1, width * .8, height * .8);
 
session.AddFilter(FilterFactory.CreateCropFilter(rect));

Закончив манипулирование, отобразите «измененное» изображение:

await session.RenderToImageAsync(Altered, OutputOption.PreserveAspectRatio);

Осталось одно задание. Сохраните изображение в формате JPEG:

var jpegBuffer = await session.RenderToJpegAsync();
var library = new MediaLibrary();
library.SavePicture("SDKSample.jpg", jpegBuffer.ToArray());

Существуют и другие перегрузки метода RenderToJpeg, которые позволяют изменить размер изображения при записи в выходной буфер или указать качество изображения назначения.

Звучит весело, я должен использовать это?

Nokia Imaging SDK в основном ценится за свою коллекцию фильтров, но он также устраняет дополнительные сложности при работе со сжатыми файлами изображений, поэтому на него определенно стоит обратить внимание.

И если у вас есть отличная идея для приложения, которое может использовать этот SDK, не забудьте принять участие в конкурсе Nokia Future Capture (закрывается 31 июля 2013 года).