You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

234 lines
3.4 KiB

/*****************************************************************************/
// 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;
}
/*****************************************************************************/