Как использовать BlendFilter Nokia Imaging SDK в WP8?

Я смотрю на Nokia Imaging SDK, чтобы немного поиграть с ним. Теперь я столкнулся с проблемой, когда у меня есть изображение, которое уже существует (в папке моего решения Visual Studio), и я хочу преобразовать это изображение, чтобы использовать его в классе BlendFilter пакета Nokia Imaging SDK. Однако я не знаю, как его использовать.

Я пытался преобразовать существующее изображение в поток, а затем передать его в качестве параметра конструктору BlendFilter. Но не удача. Компилятор говорит, что наилучший метод перегрузки соответствует недопустимым аргументам.

Это способ, которым я пытаюсь загрузить существующее изображение в поток:

Image image = new Image();
image.Source = new BitmapImage(new Uri("/Images/Template3.2.png", UriKind.Relative));

BitmapImage bitImage = new BitmapImage(new Uri("/Images/Template3.2.png", UriKind.Relative));

WriteableBitmap Bitmap = new WriteableBitmap(bitImage);

А потом:

var BlendFilter = new BlendFilter(bitImage, BlendFunction.Add);  --> the compiler error is here

Кто-нибудь знает, как использовать класс BlendFilter? любой пример был бы очень полезен.

С уважением!

1 ответ

Решение

Фильтр смешивания принимает IImageProvider в качестве входных данных. Это означает, что вы можете использовать любой из классов X-ImageSource в качестве входных данных, и он будет выполнять всю работу внутри.

Если у вас есть поток изображения, я предлагаю вам создать StreamImageSource и передать его в BlendFilter.

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

Вот пример, который принимает поток изображения в качестве входных данных и смешивает новое изображение поверх него. Для простоты другое изображение - это просто изображение, заполненное одним цветом (ColorImageSource), но вы можете установить в качестве источника любой IImageProvider: выберите наиболее удобный.

using (var backgroundSource = new StreamImageSource(stream))
using (var filterEffect = new FilterEffect(backgroundSource))
{
    using (BlendFilter blendFilter = new BlendFilter()) 
    {
        var size = new Windows.Foundation.Size(400, 400);
        var color = Windows.UI.Color.FromArgb(250, 128, 255, 200);

        blendFilter.ForegroundSource = new ColorImageSource(size, color);
        blendFilter.BlendFunction = BlendFunction.Add;

        filterEffect.Filters = new[] { blendFilter };

        var result = await new JpegRenderer(filterEffect).RenderAsync();
    }
}
Другие вопросы по тегам