圖形特效處理(2)

摘要:圖形特效處理(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, 影像屬性)

 這樣做就可以把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)

其中的 G.DrawImageUnscaled 為執行不縮放的繪製動作

利用矩陣先把圖形縮放到和Picturebox一樣大, 然後繪製上去

使用上和 G.DrawImage差不多, 但是不縮放計算的速度會快很多

兩者的用途和時機不一樣, 這部份後面再來一些不同的文章來討論好了

順著天賦做事,逆著個性做人生命, 就該浪費在美好的事物上