2009年8月30日 星期日

Silverlight 3 當中的EasingFunction

EasingFunction是SL3當中針對動畫機制加上的特效處理,如同Effect一樣,SL3當中內建了基本的一些功能,當然開發人員也可以繼承基底類別開發自己的EasingFunction,我們先來看如何使用。

Dim sb As New Storyboard
Dim da As New DoubleAnimation
da.From = 0
da.To = 350
da.Duration = New TimeSpan(0, 0, 3)
Storyboard.SetTarget(da, ellipse2)
Storyboard.SetTargetProperty(da, New PropertyPath(Canvas.TopProperty))
sb.Children.Add(da)
sb.Begin()

上面這段程式碼用來動態建立一段動畫,並且讓動畫發生在一個圓球物件(ellipse2)上,這段動畫很簡單,在三秒內,讓圓球從上往下墜落,沒什麼特別的。

但是一旦加上EasingFunction:

'設定EasingFunction
da.EasingFunction = New BounceEase With {.Bounces = 10, .Bounciness = 2, .EasingMode = EasingMode.EaseOut}

動畫就將大大不同,球體(ellipse2)墜落動作變成具有彈跳性:


從這邊我們可以知道,透過設定DoubleAnimation的EasingFunction 屬性,我們可以指定特定的效果給動畫,而BounceEase就是效果之一,其位於System.Windows.Media.Animation命名空間之下。您可以在該命名空間下找到其他更多的效果,如前所述,您也可以繼承EasingFunctionBase類別建立自己的EasingFunction特效。

2009年8月10日 星期一

Silverlight 3中的bitmap API

SL3中的Bitmap API,是影像處理的基礎,它讓我們得以直接在記憶體中建立一個點陣圖畫布,使用的方法很簡單,直接透過Imaging底下的WriteableBitmap即可:

Dim wBitmap As New System.Windows.Media.Imaging.WriteableBitmap(…)

建構函式有三種呼叫方式,可隨您的需要使用:

WriteableBitmap(影像來源BitmapSource)
WriteableBitmap(寬Int32,高Int32)
WriteableBitmap(任何物件UIElement, Transform物件)

例如,底下的程式碼將會建立一張空白的畫布在記憶體中:

Dim wBitmap As New System.Windows.Media.Imaging.WriteableBitmap(640,480)

而WriteableBitmap物件的Pixels屬性則可以讓我們設定點陣圖的影像:

wBitmap.Pixels(y * wBitmap.PixelHeight + x) = pixel

而上面的Pixel則可以透過底下這樣的方式計算出來:

Dim brg As Byte() = New Byte(3) {}
'Blue, B
brg(0) = CByte(color.B)
'Green, G
brg(1) = CByte(color.G)
'Red, R
brg(2) = CByte(color.R)
'透明度
brg(3) = color.A
Dim pixel As Integer = BitConverter.ToInt32(brg, 0)

透過這樣的方式,您可以很輕易的建立出類似底下這樣的影像雜點效果: