WPF - Контроль смешивания между полупрозрачными слоями

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

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

http://www.psdtop.com/blog/wp-content/images/020_Blending-Modes/blending-mode.jpg

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

Насколько я могу судить, 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>

Который выглядит так:

http://img4.imageshack.us/img4/5541/temprx.png

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

3 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам