Слияние двух или более изображений в WP 8.1 RT

Я пытаюсь создать большее изображение, повторяя мозаику из нескольких маленьких изображений. Как я могу сделать это в С#/WP8.1?

Я пытался объединить массивы байтов (простое добавление не работает), пытался отобразить на XAML (не работает, получаю разделительные линии с некоторыми изображениями), пробовал с WriteableBitmapEx (слишком медленный, требует потока пользовательского интерфейса для обработки) и два метода Lumia Imaging SDK (JpegTools и BlendEffect), но оба создают разделительные линии.

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

Я хотел бы изучить возможность копирования на уровне байтов; как мне это сделать? Как объединить два массива изображений и создать одно изображение большего размера?

EDIT: Вопрос касается WP 8.1 RT, а не универсальной платформы C#.


person nimbudew    schedule 04.08.2015    source источник
comment
Вы смотрели в Emgu (оболочка OpenCV .Net)? Довольно легко (и быстро) загрузить изображение с заданным путем и перебрать его как byte[].   -  person KDecker    schedule 04.08.2015


Ответы (1)


Вы можете использовать WriteableBitmapEx, чтобы загрузить исходное изображение в WB, затем использовать WriteableBitmapEx, чтобы получить доступ к свойству буфера/пикселей и запустить слияние в фоновом потоке. Итак, получите массив Pixels всех WB, которые вы хотите объединить, а затем используйте массив Pixels и объедините их. Возможно, вы даже сможете использовать быстрый Buffer.BlockCopy или его эквивалент в WinRT. Получив окончательно объединенный буфер массива, создайте новый WB с правильным агрегированным размером и установите его буфер Pixels в объединенный массив. Вам нужно только получить доступ к потоку пользовательского интерфейса, когда вы создаете новый экземпляр WB.

person Rene Schulte    schedule 05.08.2015
comment
Я использовал WriteableBitmapEx.Blit() для многократного объединения изображений, но метод Blit() также требует потока пользовательского интерфейса. Кроме того, я не совсем понял, как объединять изображения с помощью байтового буфера. Не могли бы вы немного уточнить? - person nimbudew; 06.08.2015
comment
Хорошо, я добавил еще немного деталей. Вам вообще не придется использовать Blit(). Просто используйте WBX, чтобы получить буфер пикселей исходных изображений более простым способом, объедините буферы пикселей вручную, а затем создайте новый WB на основе этого. - person Rene Schulte; 06.08.2015