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