summaryrefslogtreecommitdiff
path: root/gpr/source/lib/dng_sdk/dng_orientation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gpr/source/lib/dng_sdk/dng_orientation.cpp')
-rw-r--r--gpr/source/lib/dng_sdk/dng_orientation.cpp233
1 files changed, 233 insertions, 0 deletions
diff --git a/gpr/source/lib/dng_sdk/dng_orientation.cpp b/gpr/source/lib/dng_sdk/dng_orientation.cpp
new file mode 100644
index 0000000..820ca34
--- /dev/null
+++ b/gpr/source/lib/dng_sdk/dng_orientation.cpp
@@ -0,0 +1,233 @@
+/*****************************************************************************/
+// 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;
+
+ }
+
+/*****************************************************************************/