Сделать WriteableBitmap прозрачным в Windows Phone 8.1 C# WinRT программно

Можно ли программно добавить прозрачность к WriteableBitmap в Windows Phone 8.1 с помощью C#/WinRT?

Я ссылался на библиотеку WriteableBitmapEx в своем проекте для изменения размера изображения и копирования, что весьма полезен, и он также мог бы помочь с добавлением прозрачности или альфа-каналов/слоев, но документация не очень тщательная.

Возможно, было бы лучше иметь метод без использования библиотеки WriteableBitmapEx для достижения этого, но что бы ни работало... Я искал это некоторое время, и информации о базовом решении не так много.

Идея состоит в том, что пользователь может выбрать изображение или рисунок и прикрепить его к своему начальному экрану, а приложение сделает цвет фона прозрачным... возможно, белым или черным, или даже с использованием цвета первой координаты X/Y фон изображения.


person theMaxx    schedule 14.09.2016    source источник


Ответы (2)


Вы пытались использовать прозрачный цвет с вашим WriteableBitmapEx? Например, чтобы очистить все растровое изображение, используйте:

writeableBitmap = new WriteableBitmap(200, 200, 96, 96, PixelFormats.Bgra32, null);
writeableBitmap.Clear(Colors.Transparent);
person YetMoreStuff    schedule 15.09.2016
comment
Это делает все изображение прозрачным. Я хочу сделать прозрачным только один определенный цвет... цвет фона. - person theMaxx; 15.09.2016

Если вы хотите редактировать определенные пиксели самостоятельно, вам нужно получить доступ к свойству PixelBuffer. Я уверен, что WriteableBitmapEx делает это все время. Как и мой набор инструментов здесь. Я не могу сейчас вспомнить формат пикселей, но я думаю, что это что-то вроде ARGB или P-ARGB? Я, вероятно, запутался здесь, но в основном ваш пиксельный буфер представляет собой массив, содержащий данные для всей строки пикселей, где каждый пиксель определяется 4 байтами, поэтому растровое изображение 2x2 будет иметь что-то вроде байтов ARGBARGBARGBARGB, где каждая буква является одним из четырех пикселей значения компонентов (0-255, где 0 означает отсутствие цвета и 255 для всех цветов RGB, являющихся белыми). R — красный, G — зеленый, B — синий, A — альфа-канал — непрозрачность или прозрачность. В форматах P- или Premultiplied-pixel все значения RGB дополнительно умножаются на значение альфа-канала по соображениям производительности (IIRC).

Вам нужно будет перебрать все ваши пиксели и установить значения ARGB в соответствии с вашими правилами, чтобы добавить прозрачность там, где это необходимо, возможно, без предварительного умножения и предварительного умножения RGB по мере необходимости.

person Filip Skakun    schedule 20.09.2016