EXIFのOrientationタグの値に基づいて画像を回転し、適切な方向に戻す方法。 この例では、値がリトルエンディアンで格納されていることを前提としている。 また、左右反転・上下反転している画像については考慮していない。

Sponsored Link

using (var origin = new Bitmap("origin.jpg")) {
  var rotation = RotateFlipType.RotateNoneFlipNone;

  foreach (var item in origin.PropertyItems) {
    if (item.Id != 0x0112)
      continue;

    // IFD0 0x0112; Orientation
    switch (item.Value[0]) {
      case 3: rotation = RotateFlipType.Rotate180FlipNone; break;
      case 6: rotation = RotateFlipType.Rotate90FlipNone; break;
      case 8: rotation = RotateFlipType.Rotate270FlipNone; break;
    }
  }

  using (var rotated = (Bitmap)origin.Clone()) {
    rotated.RotateFlip(rotation);
    rotated.Save("rotated.bmp", ImageFormat.Bmp);
  }
}