[Home]

「ペイント」で画像を回転させる方法

一、何をしたいのか

Windowsに標準でついている「ペイント」(mspaint.exe)は、その名のとおりペイント系のお絵かきツールです。
ペイント系のツールですから、ドロー系ツールと違い画像の回転はあまり得意ではなく、メニューの[反転と回転...](Ctrl+R)を使用しても90°単位でしか回転できません。(PhotoShop等、強力なソフトなら別ですが)
「ペイント」にはもうひとつ[伸縮と傾き(S)...](Ctrl+W)というメニューがあり、こちらを使えば任意の角度で回転させることが出きます。
でも、実際にやってみると、きれいに回転させるのはなかなか難しく

してしまいます。
そこで、この[伸縮と傾き(S)...](Ctrl+W)を使い、画像をきれいに回転させる方法について、考えます。

二、理論?

[変形(I)]-[伸縮と傾き(S)...](Ctrl+W)でダイアログを表示すると、次の様に四つの設定項目があります。

これらは四つの設定項目は、それぞれ一次変換として行列で表現できて、うまくやると、その行列の積で目的の回転行列が作れそうです。一般に交換法則は成り立たないので、変換の順序が重要となります。
回転角度が10°を超えると四つの項目を同時に設定、変換をしてもうまくいきません。
そこで、手始めに「垂直方向の傾き」だけを設定して変換を行い、結果を観察してみます。

ここまでの観察結果から、目的の自由回転を得る為に必要な変換を整理すると、

  1. 垂直方向にθ°傾ける。
  2. 水平方向に1/cosθ、垂直方向にcosθの伸縮を実行。
    このときに入力できる数値は、500%が上限のため、θ°が78を超える場合は、2回に分けて回転させる必要がある。
  3. 水平方向へ-θ°傾ける。

大体こんな感じですが、実際やってみないと分かりませんので、具体例でやってみます。

三、実際にやってみる

画像を用意する。
sample 1

試しに際に、反時計回りに30°回転させてみる。「ペイント」を起動し画像を読み込んだら、[変形(I)]-[伸縮と傾き(S)...](Ctrl+W)でダイアログを表示。
dialog 1

反時計回りに30°というのは、垂直方向に傾き30°なので、「30」を入力して変換します。
こんな感じです。
sample 2

残りの変換を行うため、再度ダイアログを表示します。
dialog 2

  1. 水平方向の伸縮 1/cosθ
    windowsの電卓なら、関数電卓にして、〔3〕〔0〕〔cos〕〔1/x〕 = 1.1547…から、「115」を入力。
  2. 垂直方向の伸縮 cosθ
    関数電卓で、〔3〕〔0〕〔cos〕 = 0.8660…から、「87」を入力。
  3. 水平方向の傾き
    反時計周りの場合、負の値になるので、「-30」を入力。

以上の内容で変換すると。こんな感じ。
sample 3

回転後も直角は直角になっていて、きれいに30°傾きました。画像の劣化がありますが、これはあらかじめ500%に拡大しておいてから回転後に20%で縮小する等、工夫すれば極力抑えることができます。

四、あとすこし

当初の目的である自由回転は実現できましたが、このままだと、[伸縮と傾き]ダイアログを二度呼び出ししている無駄があるので、もうひと工夫して一度で済ませたいと思います。
先ほどの変換の内容を見ると、

  1. 垂直方向の傾き 30(度)
  2. 水平方向の伸縮 115(%)
  3. 垂直方向の伸縮 87(%)
  4. 水平方向の傾き -30(度)

の順序で四つの変換が実行されたことになります。
どうやら「ペイント」では、ダイアログの表示順に(上から順に)変換を行うようなので、それに合わせて変換順序を再検討する必要があります。
先ずは、最初の三つ

  1. 垂直方向の傾き 30(度)
  2. 水平方向の伸縮 115(%)
  3. 垂直方向の伸縮 87(%)

に注目して、この三つの変換順序を逆順にすることを考えてみます。

ここで、最初に30°だった傾きが、伸縮によりどう変化したか計算してみます。
最初の勾配はsinθ/cosθで、水平方向の伸張によりcosθ倍になり、垂直方向の縮小によりさらにcosθ倍となっています。
したがって、三つ目までの変換が終了した時点の垂直方向の傾きは

傾き
= arctan( (sinθ/cosθ) × cosθ × cosθ )
= arctan( sinθ × cosθ )

となり、関数電卓で計算すると、
(〕〔3〕〔0〕〔sin〕〔*〕 〔3〕〔0〕〔cos〕〔)〕 (Inv)〔tan〕 = 23.413… から、垂直方向の傾きは「23」度だったことが分かりました。
ここまでを整理すると、次のようになります。

  1. 垂直方向の伸縮 87(%)
  2. 水平方向の伸縮 115(%)
  3. 垂直方向の傾き 23(度)
  4. 水平方向の傾き -30(度)

ダイアログと比較すると、「水平」と「垂直」が入れ替わっているので、「水平」を「垂直」に、「垂直」を「水平」に置き換えると、

  1. 水平方向の伸縮 87(%)
  2. 垂直方向の伸縮 115(%)
  3. 水平方向の傾き 23(度)
  4. 垂直方向の傾き -30(度)

となり、これだと回転方向が逆になってしまうので、角度の符号を入れ替えて、

  1. 水平方向の伸縮 87(%)
  2. 垂直方向の伸縮 115(%)
  3. 水平方向の傾き -23(度)
  4. 垂直方向の傾き 30(度)

これで出来ました。

五、付録

[伸縮と傾き(S)...](Ctrl+W)ダイアログの設定情報をまとめておきます。

左回転(反時計回り)
回転
角度
(度)
伸縮(%) 傾き(度)
水平 垂直 水平 垂直
1100100 -1 1
2100100 -2 2
3100100 -3 3
4100100 -4 4
5100100 -5 5
6 99101 -6 6
7 99101 -7 7
8 99101 -8 8
9 99101 -9 9
10 98102-1010
11 98102-1111
12 98102-1112
13 97103-1213
14 97103-1314
15 97104-1415
16 96104-1516
17 96105-1617
18 95105-1618
19 95106-1719
20 94106-1820
21 93107-1821
22 93108-1922
23 92109-2023
24 91109-2024
25 91110-2125
26 90111-2226
27 89112-2227
28 88113-2328
29 87114-2329
30 87115-2330
31 86117-2431
32 85118-2432
33 84119-2533
34 83121-2534
35 82122-2535
36 81124-2536
37 80125-2637
38 79127-2638
39 78129-2639
40 77131-2640
41 75133-2641
42 74135-2642
43 73137-2743
44 72139-2744
45 71141-2745
46 69144-2746
47 68147-2747
48 67149-2648
49 66152-2649
50 64156-2650
51 63159-2651
52 62162-2652
53 60166-2653
54 59170-2554
55 57174-2555
56 56179-2556
57 54184-2557
58 53189-2458
59 52194-2459
60 50200-2360
61 48206-2361
62 47213-2362
63 45220-2263
64 44228-2264
65 42237-2165
66 41246-2066
67 39256-2067
68 37267-1968
69 36279-1869
70 34292-1870
71 33307-1771
72 31324-1672
73 29342-1673
74 28363-1574
75 26386-1475
76 24413-1376
77 22445-1277
78 21481-1178

右回転(時計回り)
回転
角度
(度)
伸縮(%) 傾き(度)
水平 垂直 水平 垂直
1100100 1 -1
2100100 2 -2
3100100 3 -3
4100100 4 -4
5100100 5 -5
6 99101 6 -6
7 99101 7 -7
8 99101 8 -8
9 99101 9 -9
10 9810210-10
11 9810211-11
12 9810211-12
13 9710312-13
14 9710313-14
15 9710414-15
16 9610415-16
17 9610516-17
18 9510516-18
19 9510617-19
20 9410618-20
21 9310718-21
22 9310819-22
23 9210920-23
24 9110920-24
25 9111021-25
26 9011122-26
27 8911222-27
28 8811323-28
29 8711423-29
30 8711523-30
31 8611724-31
32 8511824-32
33 8411925-33
34 8312125-34
35 8212225-35
36 8112425-36
37 8012526-37
38 7912726-38
39 7812926-39
40 7713126-40
41 7513326-41
42 7413526-42
43 7313727-43
44 7213927-44
45 7114127-45
46 6914427-46
47 6814727-47
48 6714926-48
49 6615226-49
50 6415626-50
51 6315926-51
52 6216226-52
53 6016626-53
54 5917025-54
55 5717425-55
56 5617925-56
57 5418425-57
58 5318924-58
59 5219424-59
60 5020023-60
61 4820623-61
62 4721323-62
63 4522022-63
64 4422822-64
65 4223721-65
66 4124620-66
67 3925620-67
68 3726719-68
69 3627918-69
70 3429218-70
71 3330717-71
72 3132416-72
73 2934216-73
74 2836315-74
75 2638614-75
76 2441313-76
77 2244512-77
78 2148111-78

[Home]