摘要:圖形特效處理(2)
關於矩陣
GDI的繪圖矩陣很複雜, 而且種類也很多
裡面用上很多數學的觀念, 這部分想要真的弄懂建議先搞懂數學的矩陣加減乘除
再來搞懂繪圖矩陣裡面的每個成分元素, 你可以對圖形做任何想要的功能
EX:想要把一張圖形半透明
1 Dim 影像屬性 As New Imaging.ImageAttributes
2 Dim cm As New Imaging.ColorMatrix
3
4 cm.Matrix33 = 0.5F
5 影像屬性.SetColorMatrix(cm)
6 G.DrawImage(Img, New Rectangle(50, 50, 200, 300), 0, 0, 97, 92, GraphicsUnit.Pixel, 影像屬性)
2 Dim cm As New Imaging.ColorMatrix
3
4 cm.Matrix33 = 0.5F
5 影像屬性.SetColorMatrix(cm)
6 G.DrawImage(Img, New Rectangle(50, 50, 200, 300), 0, 0, 97, 92, GraphicsUnit.Pixel, 影像屬性)
這樣做就可以把IMG這個影像變成半透明顯示出來
其中cm.Matrix33 = 0.5F 用來控制透明度
另外裡面用上顏色矩陣, 這是一種5 x 5的數學矩陣, 裡面每個元素都有不一樣功能,
有些元素還和別人搭配來用
這個矩陣的功能目前我可以變化出約50~60種, 已經用在我接案的各種CASE裡面
還在研究中, 等完全研究通再來說明吧
EX: 想要對圖形作縮放
01 Dim 長寬比 As Double = Math.Max(Img.Width / Me.PictureBox1.Width, Img.Height / Me.PictureBox1.Height)
02
03 Dim x As Single = (Me.PictureBox1.Width * 長寬比 / 2 - Img.Width / 2)
04
05 Dim y As Single = (Me.PictureBox1.Height * 長寬比 / 2 - Img.Height / 2)
06
07 Dim mx As Drawing2D.Matrix = New Drawing2D.Matrix(1.0F / 長寬比, 0, 0, 1.0F / 長寬比, 0, 0)
08
09 mx.Translate(x, y)
10 G.Transform = mx
11 G.DrawImageUnscaled(Img, 0, 0)
02
03 Dim x As Single = (Me.PictureBox1.Width * 長寬比 / 2 - Img.Width / 2)
04
05 Dim y As Single = (Me.PictureBox1.Height * 長寬比 / 2 - Img.Height / 2)
06
07 Dim mx As Drawing2D.Matrix = New Drawing2D.Matrix(1.0F / 長寬比, 0, 0, 1.0F / 長寬比, 0, 0)
08
09 mx.Translate(x, y)
10 G.Transform = mx
11 G.DrawImageUnscaled(Img, 0, 0)
其中的 G.DrawImageUnscaled 為執行不縮放的繪製動作
利用矩陣先把圖形縮放到和Picturebox一樣大, 然後繪製上去
使用上和 G.DrawImage差不多, 但是不縮放計算的速度會快很多
兩者的用途和時機不一樣, 這部份後面再來一些不同的文章來討論好了
順著天賦做事,逆著個性做人生命, 就該浪費在美好的事物上