Установка прозрачности WPF ImageSource (эквивалент GDI Matrix33 = 0.5f)? - PullRequest
3 голосов
/ 15 ноября 2011

Имеет ли WPF эквивалент этому?

ImageAttributes ia = new ImageAttributes();
ia.SetColorMatrix(new ColorMatrix { Matrix33 = 0.5f }, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

Другими словами, могу ли я настроить прозрачность WPF ImageSource (или любого другого класса, связанного с рисованием, например, BitmapImage), или GDI является лучшим выбором здесь?

Я не собираюсь рисовать изображение в окне, поэтому я считаю, что это исключает использование класса Image (?)

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

Ответы [ 3 ]

2 голосов
/ 15 ноября 2011

check WriteableBitmapEx , который предоставляет набор методов расширения для управления растровыми изображениями в памяти с помощью WPF и Silverlight.

В WPF как таковой нет ничего, что позволяло бы вам хотеть, но класс WPF / Silverlight WriteableBitmap предоставляет быстрый низкоуровневый API для рисования / манипуляции и является нативнымв WPF.

WriteableBitmapEx затем основывается на этом, предоставляя методы расширения для выполнения операций, подобных GDI.Существует функция Convolute , которая позволяет свертывать изображение с матрицей, чтобы вы могли сделать выше.Примечание. WB-Ex является библиотекой Silverlight, но они также предоставляют необслуживаемую версию WPF, которая, хотя и неполная, может быть расширена для обеспечения актуальности версии Silverlight.

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

0 голосов
/ 15 ноября 2011

После ваших комментариев я создал пример проекта, который может быстро изменить альфа-канал, используя WriteableBitmapEx в качестве основы, и загрузил его в мой Блог Компании .Вам придется простить форматирование, это новый веб-сайт и все еще есть некоторые глюки, которые нужно сгладить!Ссылка для скачивания находится на странице под названием BitmapAlphaChannel

Вы правы, говоря, что аппаратное ускорение WPF применяется только к ограниченному набору функций.Например, вся компоновка выполняется на процессоре, тесселяция на процессоре, только финальный рендеринг выполняется на графическом процессоре.В результате WPF по моему опыту работает медленнее, чем GDI +, конечно, GDI.Однако его можно подтолкнуть в правильном направлении, чтобы делать то, что вы хотите, со скоростью, которую вы хотите!

0 голосов
/ 15 ноября 2011

Изображение имеет поле opacity, значение которого находится в диапазоне от 1,0 (полностью непрозрачный) до 0,0 (невидимый)

Например:

<Image 
 Height="107" 
 Margin="367,0,473,83" 
 Source="Images/4.png" 
 Stretch="Fill" 
   VerticalAlignment="Bottom" Opacity="0.5"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...