EXIFのOrientationタグの値に基づいて画像を回転し、適切な方向に戻して再保存する方法。 また逆に、Orientationタグを設定して画像を回転した状態で保存する方法。
Orientationタグから画像の方向を復元する
Bitmap.PropertyItemsプロパティを参照すると画像に付与されているEXIFの情報を取得することができる。 ID(PropertyItem.Id)が0x0112
のタグがOrientationタグなので、このIDを持つタグの値(PropertyItem.Value)を参照することで画像の方向を知ることができる。 画像の回転にはImage.RotateFlipメソッドを使うことができる。
上記の例では水平方向・垂直方向に反転している画像については考慮していない。 Orientationタグは次のいずれかの値を取りうる。
Orientationタグの値 | 方向を元に戻すために施す処理 |
---|---|
1 | 不要(回転・反転なし) |
2 | 水平方向に反転 |
3 | 時計回りに180度回転 |
4 | 垂直方向に反転 |
5 | 水平方向に反転+時計回りに270度回転 |
6 | 時計回りに90度回転 |
7 | 水平方向に反転+時計回りに90度回転 |
8 | 時計回りに270度回転 |
Orientationタグを設定して保存する
逆に、Orientationタグを設定して画像を保存する方法。 EncoderParameterを使ってEncoder.Transformationと以下の値を指定することで、画像を回転(もしくは反転)された状態で表示されるように指定することが出来る。
指定する値 | 画像の回転・反転方向 |
---|---|
EncoderValue.TransformRotate90 | 時計回りに90度回転するようにする |
EncoderValue.TransformRotate180 | 時計回りに180度回転するようにする |
EncoderValue.TransformRotate270 | 時計回りに270度回転するようにする |
EncoderValue.TransformFlipHorizontal | 水平方向に反転するようにする |
EncoderValue.TransformFlipVertical | 垂直方向に反転するようにする |
なお、この方法を使ってもロスレスでの回転とはならない模様(保存時にJPEGへの再エンコードが行われる)。