WPF - Контроль смешивания между полупрозрачными слоями - PullRequest
5 голосов
/ 01 ноября 2009

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

Вот пример меню режима наложения слоев в Photoshop:


(источник: psdtop.com )

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

Насколько я могу судить, WPF предоставляет только опцию "Normal". То есть следующий пользовательский интерфейс просто смешивает цвета, как если бы они были цветными гелями:

<Grid>
  <Ellipse Width="40" Height="40" Fill="#80FF0000" Margin="16,0,0,0" />
  <Ellipse Width="40" Height="40" Fill="#8000FF00" Margin="32,32,0,0" />
  <Ellipse Width="40" Height="40" Fill="#800000FF" Margin="0,32,0,0" />
</Grid>

Что выглядит так:

Я хотел бы знать, есть ли способ контролировать способ смешивания слоев.

Ответы [ 3 ]

7 голосов
/ 01 ноября 2009

То, что вы ищете, называется режимами наложения, если вы в Google это найдете много , Вот простой пример , как этого можно добиться с помощью пиксельных шейдеров. Для этого вы бы использовали мульти-входной шейдерный эффект .

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

Режимы наложения как неотъемлемая часть API-интерфейсов WPF часто запрашивались с ранних CTP, но никогда не входили в продукт.

5 голосов
/ 11 декабря 2009

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

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

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

Если бы я мог указать вам на один набор исходного кода / двоичных файлов для использования, это был бы один , где я делаю осведомленность о прозрачности библиотеки режима наложения. Это новейшие и лучшие биты, которые работают как на WPF, так и на Silverlight. Последняя запись с эффектами оттенка, насыщенности, цвета и яркости является версией библиотеки только для WPF, поскольку для этих эффектов требуется Pixel Shader 3.0, и в настоящее время это поддерживается только в WPF 4.0.

Удачи и дайте мне знать, если вы используете мою библиотеку!

3 голосов
/ 01 ноября 2009

Полагаю, вам придется написать собственный эффект шейдера, чтобы WPF смешивал цвета по-другому.

http://msdn.microsoft.com/en-us/library/dd901594(VS.95).aspx Выделите Создание пользовательского эффекта пиксельного шейдера

Это не тривиальная вещь, я понимаю. Иногда легче пойти на компромисс, используя статические графические ресурсы. Наш дизайнер пользовательского интерфейса не может жить с смешиванием цветов WPF, поэтому некоторые части нашего интерфейса используют простые файлы .png, где ему абсолютно необходимо, чтобы они выглядели определенным образом.

...