1. 程式人生 > >淺談WPF中對控件的位圖特效(WPF Bitmap Effects)

淺談WPF中對控件的位圖特效(WPF Bitmap Effects)

作用 ive 圖形圖像 控件 級別 library art 分享 ack

原文:淺談WPF中對控件的位圖特效(WPF Bitmap Effects)

--------------------------------------------------------------------------------
引用或轉載時請保留以下信息:
大可山?[MSN:a3news(AT)hotmail.com]
http://www.zpxp.com?http://www.brawdraw.com
蘿蔔鼠在線圖形圖像處理
--------------------------------------------------------------------------------

在WPF中,使用BitmapEffect對所有Visual對象進行位圖特效處理(比如文本,按鈕,圖像,甚至矩形、畫布等),它是基於像素級別的,而且是基於軟件處理模式而非硬件加速的處理模式
BitmapEffect在控件渲染時起作用,當控件渲染時,該Visual對象轉化成相應的BitmapSource並作為BitmapEffect的輸入,顯示為經過BitmapEffect處理後的效果。
我們可以對控件進行以下幾種常見的位圖特效處理:
(1)虛化效果(BlurBitmapEffect)
(2)外輝光效果(OuterGlowBitmapEffect)
(3)陰影效果(DropShadowBitmapEffect)
(4)斜面特效(BevelBitmapEffect)
(5)浮雕特效(EmbossBitmapEffect)


由於軟件處理模式的效率相對較低,在有大量Visual對象或在有大量動畫時慎用,此時你必須在效果與效率之間做一個相對的平衡。

下面先看看虛化效果:

技術分享圖片
上圖:
第一個按鈕是未經虛化的按鈕效果;
第二個按鈕是當Radius="1"時的效果;
第三個按鈕是當Radius="2"時的效果;

這是XAML代碼:

?<Button? Width="200" Height="30" Content="這是未虛化的按鈕" Canvas.Left="24" Canvas.Top="8"/>
?<Button? Width="200" Height="30" Content="這是虛化了的按鈕(Radius=1)" Canvas.Top="47" Canvas.Left="24">
?? ?<Button.BitmapEffect>
???? ??<BlurBitmapEffect Radius="1" KernelType="Box" />
??</Button.BitmapEffect>


?</Button>
?<Button? Width="200" Height="30" Content="這是虛化了的按鈕(Radius=2)" Canvas.Top="87" Canvas.Left="24">
?? ?<Button.BitmapEffect>
???? ??<BlurBitmapEffect Radius="2" KernelType="Box" />
??</Button.BitmapEffect>

?</Button>

?再來看看外發光效果(輝光效果):

技術分享圖片
上圖:
第一個是對TextBox的做了細微外發光特效處理的顯示效果(參數值為:GlowColor="Blue" GlowSize="4" Noise="0.3" Opacity="0.4");

第二個對TextBox的外發光效果"力度比較大",我們發現效果非常明顯(參數值:GlowColor="Blue" GlowSize="30" Noise="1" Opacity="0.4")。

這是相應的XAML代碼:
?<TextBox Width="200" Canvas.Left="24" Canvas.Top="141">
??<TextBox.BitmapEffect>
???<OuterGlowBitmapEffect GlowColor="Blue" GlowSize="4" Noise="0.3" Opacity="0.4" />
??</TextBox.BitmapEffect>

?</TextBox>
??
? <TextBox Width="200" Canvas.Left="24" Canvas.Top="194">
????? <TextBox.BitmapEffect>
??????? <OuterGlowBitmapEffect GlowColor="Blue" GlowSize="30" Noise="1" Opacity="0.4" />
????? </TextBox.BitmapEffect>

??? </TextBox>
?

在GDI+中,如果要實現虛化等效果,是需要編寫大量代碼的,比如:虛化效果(外部鏈接)。而在WPF中,這些效果都已集成到系統中了。

參考鏈接:
How to: Create Text with a Shadow?
Cool WPF Effects Library
http://blogs.msdn.com/chkoenig/archive/2008/04/29/cool-wpf-effects-library.aspx

淺談WPF中對控件的位圖特效(WPF Bitmap Effects)