/*****************************************************************************/ // Copyright 2006 Adobe Systems Incorporated // All Rights Reserved. // // NOTICE: Adobe permits you to use, modify, and distribute this file in // accordance with the terms of the Adobe license agreement accompanying it. /*****************************************************************************/ /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_orientation.cpp#1 $ */ /* $DateTime: 2012/05/30 13:28:51 $ */ /* $Change: 832332 $ */ /* $Author: tknoll $ */ #include "dng_orientation.h" /*****************************************************************************/ void dng_orientation::SetTIFF (uint32 tiff) { switch (tiff) { case 1: { fAdobeOrientation = kNormal; break; } case 2: { fAdobeOrientation = kMirror; break; } case 3: { fAdobeOrientation = kRotate180; break; } case 4: { fAdobeOrientation = kMirror180; break; } case 5: { fAdobeOrientation = kMirror90CCW; break; } case 6: { fAdobeOrientation = kRotate90CW; break; } case 7: { fAdobeOrientation = kMirror90CW; break; } case 8: { fAdobeOrientation = kRotate90CCW; break; } case 9: { fAdobeOrientation = kUnknown; break; } default: { fAdobeOrientation = kNormal; } } } /*****************************************************************************/ uint32 dng_orientation::GetTIFF () const { switch (fAdobeOrientation) { case kNormal: { return 1; } case kMirror: { return 2; } case kRotate180: { return 3; } case kMirror180: { return 4; } case kMirror90CCW: { return 5; } case kRotate90CW: { return 6; } case kMirror90CW: { return 7; } case kRotate90CCW: { return 8; } case kUnknown: { return 9; } default: break; } return 1; } /*****************************************************************************/ bool dng_orientation::FlipD () const { return (fAdobeOrientation & 1) != 0; } /*****************************************************************************/ bool dng_orientation::FlipH () const { if (fAdobeOrientation & 4) return (fAdobeOrientation & 2) == 0; else return (fAdobeOrientation & 2) != 0; } /*****************************************************************************/ bool dng_orientation::FlipV () const { if (fAdobeOrientation & 4) return FlipD () == FlipH (); else return FlipD () != FlipH (); } /*****************************************************************************/ dng_orientation dng_orientation::operator- () const { uint32 x = GetAdobe (); if ((x & 5) == 5) { x ^= 2; } dng_orientation result; result.SetAdobe (((4 - x) & 3) | (x & 4)); return result; } /*****************************************************************************/ dng_orientation dng_orientation::operator+ (const dng_orientation &b) const { uint32 x = GetAdobe (); uint32 y = b.GetAdobe (); if (y & 4) { if (x & 1) x ^= 6; else x ^= 4; } dng_orientation result; result.SetAdobe (((x + y) & 3) | (x & 4)); return result; } /*****************************************************************************/