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 ссылается на начальную запись в моей серии блогов... но к каждой записи прикреплен исходный код и двоичные файлы для самой библиотеки режима наложения.
Вот серия пока (в хронологическом порядке). Я хочу написать еще один пост о том, как можно использовать эти режимы наложения... и какое значение они вносят в таблицу.
- Режимы наложения, часть I
- Режимы наложения, часть II
- Режимы наложения для Silverlight
- Режимы наложения, часть III
- Режимы смешивания: теперь прозрачность
- Режимы наложения: оттенок, насыщенность, цвет и яркость с WPF 4.0
Если бы я мог указать вам один набор исходного кода / двоичных файлов для использования, это был бы тот, где я делаю осведомленность о прозрачности библиотеки режима наложения. Это новейшие и лучшие биты, которые работают как на WPF, так и на Silverlight. Последняя публикация с эффектами оттенка, насыщенности, цвета и яркости является версией библиотеки только для WPF, поскольку для этих эффектов требуется Pixel Shader 3.0, и в настоящее время это поддерживается только в WPF 4.0.
Удачи и дайте мне знать, если вы используете мою библиотеку!
Я верю, что вам придется написать собственный эффект шейдера, чтобы WPF смешивал цвета по-другому.
http://msdn.microsoft.com/en-us/library/dd901594(VS.95).aspx Прокрутите до пункта Создание пользовательского эффекта пиксельного шейдера
Это не тривиальная вещь, я понимаю. Иногда легче пойти на компромисс, используя статические графические ресурсы. Наш дизайнер пользовательского интерфейса не может жить с смешиванием цветов WPF, поэтому некоторые части нашего интерфейса используют простые файлы.png, где он должен был выглядеть так.