[Home]
「ペイント」で画像を回転させる方法
一、何をしたいのか
Windowsに標準でついている「ペイント」(mspaint.exe)は、その名のとおりペイント系のお絵かきツールです。
ペイント系のツールですから、ドロー系ツールと違い画像の回転はあまり得意ではなく、メニューの[反転と回転...](Ctrl+R)を使用しても90°単位でしか回転できません。(PhotoShop等、強力なソフトなら別ですが)
「ペイント」にはもうひとつ[伸縮と傾き(S)...](Ctrl+W)というメニューがあり、こちらを使えば任意の角度で回転させることが出きます。
でも、実際にやってみると、きれいに回転させるのはなかなか難しく
- 図が歪んだり
- 元の大きさと違ってしまったり
- 回転角度が正確でなかったり
してしまいます。
そこで、この[伸縮と傾き(S)...](Ctrl+W)を使い、画像をきれいに回転させる方法について、考えます。
二、理論?
[変形(I)]-[伸縮と傾き(S)...](Ctrl+W)でダイアログを表示すると、次の様に四つの設定項目があります。
- 水平方向の伸縮 1〜500(%)
- 垂直方向の伸縮 1〜500(%)
- 水平方向の傾き -89〜89(度)
- 垂直方向の傾き -89〜89(度)
これらは四つの設定項目は、それぞれ一次変換として行列で表現できて、うまくやると、その行列の積で目的の回転行列が作れそうです。一般に交換法則は成り立たないので、変換の順序が重要となります。
回転角度が10°を超えると四つの項目を同時に設定、変換をしてもうまくいきません。
そこで、手始めに「垂直方向の傾き」だけを設定して変換を行い、結果を観察してみます。
- 「傾ける」ではなく「持ち上げる」感じの変換になっている。
- 水平方向にも傾けたいが、単純に-θ°の傾きで変換してもダメっぽい。
- 水平方向に-θ°の傾きで変換をする前に、伸縮による変形が必要。
- 元の水平線はθ°の正しい角度で傾いている。
- 新しい水平線も、0°で正しい角度になっている。
- しかし、水平線の長さはこの時点で既に、目的とする長さより短くなっている。
- 単なる回転による変形(長さが不変)と比べると、水平方向の長さはcosθ:1に短くなっている。
- ということは、cosθ:1に収縮した水平線を、水平方向へ伸張し長さを補正する必要がある。
- 水平方向へ伸張した場合、面積も1:cosθ倍になってしまう。
- 面積を変えないためには、垂直方向にcosθ:1の縮小が必要。
- これらの、水平方向の伸張と垂直方向の縮小によって、元の水平線の角度はθ°より小さくなってしまうが、垂直線が確定すればまた、θ°に戻り解決しそうな予感がする。
ここまでの観察結果から、目的の自由回転を得る為に必要な変換を整理すると、
- 垂直方向にθ°傾ける。
- 水平方向に1/cosθ、垂直方向にcosθの伸縮を実行。
このときに入力できる数値は、500%が上限のため、θ°が78を超える場合は、2回に分けて回転させる必要がある。
- 水平方向へ-θ°傾ける。
大体こんな感じですが、実際やってみないと分かりませんので、具体例でやってみます。
三、実際にやってみる
画像を用意する。
試しに際に、反時計回りに30°回転させてみる。「ペイント」を起動し画像を読み込んだら、[変形(I)]-[伸縮と傾き(S)...](Ctrl+W)でダイアログを表示。
反時計回りに30°というのは、垂直方向に傾き30°なので、「30」を入力して変換します。
こんな感じです。
残りの変換を行うため、再度ダイアログを表示します。
- 水平方向の伸縮 1/cosθ
windowsの電卓なら、関数電卓にして、〔3〕〔0〕〔cos〕〔1/x〕 = 1.1547…から、「115」を入力。
- 垂直方向の伸縮 cosθ
関数電卓で、〔3〕〔0〕〔cos〕 = 0.8660…から、「87」を入力。
- 水平方向の傾き
反時計周りの場合、負の値になるので、「-30」を入力。
以上の内容で変換すると。こんな感じ。
回転後も直角は直角になっていて、きれいに30°傾きました。画像の劣化がありますが、これはあらかじめ500%に拡大しておいてから回転後に20%で縮小する等、工夫すれば極力抑えることができます。
四、あとすこし
当初の目的である自由回転は実現できましたが、このままだと、[伸縮と傾き]ダイアログを二度呼び出ししている無駄があるので、もうひと工夫して一度で済ませたいと思います。
先ほどの変換の内容を見ると、
- 垂直方向の傾き 30(度)
- 水平方向の伸縮 115(%)
- 垂直方向の伸縮 87(%)
- 水平方向の傾き -30(度)
の順序で四つの変換が実行されたことになります。
どうやら「ペイント」では、ダイアログの表示順に(上から順に)変換を行うようなので、それに合わせて変換順序を再検討する必要があります。
先ずは、最初の三つ
- 垂直方向の傾き 30(度)
- 水平方向の伸縮 115(%)
- 垂直方向の伸縮 87(%)
に注目して、この三つの変換順序を逆順にすることを考えてみます。
- 順序を変更しても、同じ図形に変換されなければならない。
- 出来上がった図形は、最初に30°だった傾きが、伸縮により角度が浅くなった。
- よく見ると、「垂直方向の傾き」と「垂直方向の伸縮」では、図形の横幅は変化してない。
- 図形の横幅は「水平方向の伸縮」でしか変形させられないので、「水平方向の伸縮」は 115(%)で確定。
- 「水平方向の伸縮」により、面積が115(%)となってしまったので、面積を87(%)とする変換が必要。
- 「垂直方向の傾き」では面積は変化させられないので「垂直方向の伸縮」が87(%)で確定。
- 結局、二つの伸縮率は変換順序にかかわらず確定する。
- 最後に実行する「垂直方向の傾き」の角度は30°より浅くてよい。
ここで、最初に30°だった傾きが、伸縮によりどう変化したか計算してみます。
最初の勾配はsinθ/cosθで、水平方向の伸張によりcosθ倍になり、垂直方向の縮小によりさらにcosθ倍となっています。
したがって、三つ目までの変換が終了した時点の垂直方向の傾きは
傾き
= arctan( (sinθ/cosθ) × cosθ × cosθ )
= arctan( sinθ × cosθ )
となり、関数電卓で計算すると、
〔(〕〔3〕〔0〕〔sin〕〔*〕
〔3〕〔0〕〔cos〕〔)〕
(Inv)〔tan〕 = 23.413… から、垂直方向の傾きは「23」度だったことが分かりました。
ここまでを整理すると、次のようになります。
- 垂直方向の伸縮 87(%)
- 水平方向の伸縮 115(%)
- 垂直方向の傾き 23(度)
- 水平方向の傾き -30(度)
ダイアログと比較すると、「水平」と「垂直」が入れ替わっているので、「水平」を「垂直」に、「垂直」を「水平」に置き換えると、
- 水平方向の伸縮 87(%)
- 垂直方向の伸縮 115(%)
- 水平方向の傾き 23(度)
- 垂直方向の傾き -30(度)
となり、これだと回転方向が逆になってしまうので、角度の符号を入れ替えて、
- 水平方向の伸縮 87(%)
- 垂直方向の伸縮 115(%)
- 水平方向の傾き -23(度)
- 垂直方向の傾き 30(度)
これで出来ました。
五、付録
「[伸縮と傾き(S)...](Ctrl+W)ダイアログ」の設定情報をまとめておきます。
左回転(反時計回り)
回転 角度 (度) |
伸縮(%) |
傾き(度) |
水平 |
垂直 |
水平 |
垂直 |
1 | 100 | 100 | -1 | 1 |
2 | 100 | 100 | -2 | 2 |
3 | 100 | 100 | -3 | 3 |
4 | 100 | 100 | -4 | 4 |
5 | 100 | 100 | -5 | 5 |
6 | 99 | 101 | -6 | 6 |
7 | 99 | 101 | -7 | 7 |
8 | 99 | 101 | -8 | 8 |
9 | 99 | 101 | -9 | 9 |
10 | 98 | 102 | -10 | 10 |
11 | 98 | 102 | -11 | 11 |
12 | 98 | 102 | -11 | 12 |
13 | 97 | 103 | -12 | 13 |
14 | 97 | 103 | -13 | 14 |
15 | 97 | 104 | -14 | 15 |
16 | 96 | 104 | -15 | 16 |
17 | 96 | 105 | -16 | 17 |
18 | 95 | 105 | -16 | 18 |
19 | 95 | 106 | -17 | 19 |
20 | 94 | 106 | -18 | 20 |
21 | 93 | 107 | -18 | 21 |
22 | 93 | 108 | -19 | 22 |
23 | 92 | 109 | -20 | 23 |
24 | 91 | 109 | -20 | 24 |
25 | 91 | 110 | -21 | 25 |
26 | 90 | 111 | -22 | 26 |
27 | 89 | 112 | -22 | 27 |
28 | 88 | 113 | -23 | 28 |
29 | 87 | 114 | -23 | 29 |
30 | 87 | 115 | -23 | 30 |
31 | 86 | 117 | -24 | 31 |
32 | 85 | 118 | -24 | 32 |
33 | 84 | 119 | -25 | 33 |
34 | 83 | 121 | -25 | 34 |
35 | 82 | 122 | -25 | 35 |
36 | 81 | 124 | -25 | 36 |
37 | 80 | 125 | -26 | 37 |
38 | 79 | 127 | -26 | 38 |
39 | 78 | 129 | -26 | 39 |
40 | 77 | 131 | -26 | 40 |
41 | 75 | 133 | -26 | 41 |
42 | 74 | 135 | -26 | 42 |
43 | 73 | 137 | -27 | 43 |
44 | 72 | 139 | -27 | 44 |
45 | 71 | 141 | -27 | 45 |
46 | 69 | 144 | -27 | 46 |
47 | 68 | 147 | -27 | 47 |
48 | 67 | 149 | -26 | 48 |
49 | 66 | 152 | -26 | 49 |
50 | 64 | 156 | -26 | 50 |
51 | 63 | 159 | -26 | 51 |
52 | 62 | 162 | -26 | 52 |
53 | 60 | 166 | -26 | 53 |
54 | 59 | 170 | -25 | 54 |
55 | 57 | 174 | -25 | 55 |
56 | 56 | 179 | -25 | 56 |
57 | 54 | 184 | -25 | 57 |
58 | 53 | 189 | -24 | 58 |
59 | 52 | 194 | -24 | 59 |
60 | 50 | 200 | -23 | 60 |
61 | 48 | 206 | -23 | 61 |
62 | 47 | 213 | -23 | 62 |
63 | 45 | 220 | -22 | 63 |
64 | 44 | 228 | -22 | 64 |
65 | 42 | 237 | -21 | 65 |
66 | 41 | 246 | -20 | 66 |
67 | 39 | 256 | -20 | 67 |
68 | 37 | 267 | -19 | 68 |
69 | 36 | 279 | -18 | 69 |
70 | 34 | 292 | -18 | 70 |
71 | 33 | 307 | -17 | 71 |
72 | 31 | 324 | -16 | 72 |
73 | 29 | 342 | -16 | 73 |
74 | 28 | 363 | -15 | 74 |
75 | 26 | 386 | -14 | 75 |
76 | 24 | 413 | -13 | 76 |
77 | 22 | 445 | -12 | 77 |
78 | 21 | 481 | -11 | 78 |
|
|
右回転(時計回り)
回転 角度 (度) |
伸縮(%) |
傾き(度) |
水平 |
垂直 |
水平 |
垂直 |
1 | 100 | 100 | 1 | -1 |
2 | 100 | 100 | 2 | -2 |
3 | 100 | 100 | 3 | -3 |
4 | 100 | 100 | 4 | -4 |
5 | 100 | 100 | 5 | -5 |
6 | 99 | 101 | 6 | -6 |
7 | 99 | 101 | 7 | -7 |
8 | 99 | 101 | 8 | -8 |
9 | 99 | 101 | 9 | -9 |
10 | 98 | 102 | 10 | -10 |
11 | 98 | 102 | 11 | -11 |
12 | 98 | 102 | 11 | -12 |
13 | 97 | 103 | 12 | -13 |
14 | 97 | 103 | 13 | -14 |
15 | 97 | 104 | 14 | -15 |
16 | 96 | 104 | 15 | -16 |
17 | 96 | 105 | 16 | -17 |
18 | 95 | 105 | 16 | -18 |
19 | 95 | 106 | 17 | -19 |
20 | 94 | 106 | 18 | -20 |
21 | 93 | 107 | 18 | -21 |
22 | 93 | 108 | 19 | -22 |
23 | 92 | 109 | 20 | -23 |
24 | 91 | 109 | 20 | -24 |
25 | 91 | 110 | 21 | -25 |
26 | 90 | 111 | 22 | -26 |
27 | 89 | 112 | 22 | -27 |
28 | 88 | 113 | 23 | -28 |
29 | 87 | 114 | 23 | -29 |
30 | 87 | 115 | 23 | -30 |
31 | 86 | 117 | 24 | -31 |
32 | 85 | 118 | 24 | -32 |
33 | 84 | 119 | 25 | -33 |
34 | 83 | 121 | 25 | -34 |
35 | 82 | 122 | 25 | -35 |
36 | 81 | 124 | 25 | -36 |
37 | 80 | 125 | 26 | -37 |
38 | 79 | 127 | 26 | -38 |
39 | 78 | 129 | 26 | -39 |
40 | 77 | 131 | 26 | -40 |
41 | 75 | 133 | 26 | -41 |
42 | 74 | 135 | 26 | -42 |
43 | 73 | 137 | 27 | -43 |
44 | 72 | 139 | 27 | -44 |
45 | 71 | 141 | 27 | -45 |
46 | 69 | 144 | 27 | -46 |
47 | 68 | 147 | 27 | -47 |
48 | 67 | 149 | 26 | -48 |
49 | 66 | 152 | 26 | -49 |
50 | 64 | 156 | 26 | -50 |
51 | 63 | 159 | 26 | -51 |
52 | 62 | 162 | 26 | -52 |
53 | 60 | 166 | 26 | -53 |
54 | 59 | 170 | 25 | -54 |
55 | 57 | 174 | 25 | -55 |
56 | 56 | 179 | 25 | -56 |
57 | 54 | 184 | 25 | -57 |
58 | 53 | 189 | 24 | -58 |
59 | 52 | 194 | 24 | -59 |
60 | 50 | 200 | 23 | -60 |
61 | 48 | 206 | 23 | -61 |
62 | 47 | 213 | 23 | -62 |
63 | 45 | 220 | 22 | -63 |
64 | 44 | 228 | 22 | -64 |
65 | 42 | 237 | 21 | -65 |
66 | 41 | 246 | 20 | -66 |
67 | 39 | 256 | 20 | -67 |
68 | 37 | 267 | 19 | -68 |
69 | 36 | 279 | 18 | -69 |
70 | 34 | 292 | 18 | -70 |
71 | 33 | 307 | 17 | -71 |
72 | 31 | 324 | 16 | -72 |
73 | 29 | 342 | 16 | -73 |
74 | 28 | 363 | 15 | -74 |
75 | 26 | 386 | 14 | -75 |
76 | 24 | 413 | 13 | -76 |
77 | 22 | 445 | 12 | -77 |
78 | 21 | 481 | 11 | -78 |
|
[Home]