摘要:圖形的縮放
通常, 圖形的縮放是很常用的動作, 花樣也很多
程式不難寫,難的是在, 如何做才能令人滿意?
有些問題需要解決
1. 是否縮放到和目標區域一樣大(ex: 圖是扁的, 目標區域卻是寬的)
2. 小變大, 會有失真現象, 不能放的太大, 也需要適度的使用柔邊
3. 大變小,是否可能令關鍵特徵消失或是模糊化(ex: 機器人影像辨識領域, 圖形縮小反而可能害關鍵的資訊不見)
如果會這樣就不該縮小, 而是對圖形"切塊"處理
以下先來看個簡單的程式
01
Dim 目標寬 As Integer = Me.PictureBox2.Width
02
Dim 目標高 As Integer = Me.PictureBox2.Height
03
04
Dim W As Integer = IMG.Width
05
Dim H As Integer = IMG.Height
06
Dim R As Double = W / H
07
08
W = 目標寬 ' 先依照寬度調整成一樣
09
H = W / R ' 高度按比例縮放
10
11
If H > 目標高 Then ' 但可能高度縮放後超過目標的高度
12
H = 目標高 ' 則 高度調整成和目標一樣
13
W = H * R ' 寬度按比例縮放
14
End If
15
16
TImg = New Bitmap(IMG, W, H) ' 重新產生一張圖型
17
Me.PictureBox2.Image = TImg ' 放進去

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

來源圖形在picturebox1裡面, 欲縮放到picturebox 2, 且長寬比還要維持一樣
IMG就是picturebox1的image
這樣就能按照原來的比例縮放出一張新的圖
但, 有些時候想要存檔呢?
需要指定格式以後再存
1
Dim 格式 As Imaging.ImageFormat
2
格式 = Imaging.ImageFormat.Gif ' 這裡有很多格式可以選
3
TImg.Save(Me.SaveFileDialog1.FileName, 格式) ' 存到想要的地方

2

3

但萬一沒有預設的格式可以符合需求
這部份就必須自己寫存檔的部份了, 或是上網抓相對的元件來用
最常見大概就是存成PDF檔案, 這下篇文章再來專門探討吧
順著天賦做事,逆著個性做人生命, 就該浪費在美好的事物上