1/*****************************************************************************/
2// Copyright 2006 Adobe Systems Incorporated
3// All Rights Reserved.
4//
5// NOTICE: Adobe permits you to use, modify, and distribute this file in
6// accordance with the terms of the Adobe license agreement accompanying it.
7/*****************************************************************************/
8
9/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_orientation.h#1 $ */
10/* $DateTime: 2012/05/30 13:28:51 $ */
11/* $Change: 832332 $ */
12/* $Author: tknoll $ */
13
14/******************************************************************************/
15
16#ifndef __dng_orientation__
17#define __dng_orientation__
18
19/******************************************************************************/
20
21#include "dng_types.h"
22
23/******************************************************************************/
24
25class dng_orientation
26 {
27
28 private:
29
30 // We internally use an orientation encoding ("Adobe") that is
31 // different than the TIFF orientation encoding ("TIFF").
32
33 uint32 fAdobeOrientation;
34
35 public:
36 enum
37 {
38 kNormal = 0,
39 kRotate90CW = 1,
40 kRotate180 = 2,
41 kRotate90CCW = 3,
42 kMirror = 4,
43 kMirror90CW = 5,
44 kMirror180 = 6,
45 kMirror90CCW = 7,
46 kUnknown = 8
47 };
48
49
50 dng_orientation ()
51
52 : fAdobeOrientation (kNormal)
53
54 {
55 }
56
57 void SetAdobe (uint32 adobe)
58 {
59 fAdobeOrientation = adobe;
60 }
61
62 uint32 GetAdobe () const
63 {
64 return fAdobeOrientation;
65 }
66
67 void SetTIFF (uint32 tiff);
68
69 uint32 GetTIFF () const;
70
71 static dng_orientation AdobeToDNG (uint32 adobe)
72 {
73
74 dng_orientation result;
75
76 result.SetAdobe (adobe);
77
78 return result;
79
80 }
81
82 static dng_orientation TIFFtoDNG (uint32 tiff)
83 {
84
85 dng_orientation result;
86
87 result.SetTIFF (tiff);
88
89 return result;
90
91 }
92
93 static dng_orientation Normal ()
94 {
95 return AdobeToDNG (kNormal);
96 }
97
98 static dng_orientation Rotate90CW ()
99 {
100 return AdobeToDNG (kRotate90CW);
101 }
102
103 static dng_orientation Rotate180 ()
104 {
105 return AdobeToDNG (kRotate180);
106 }
107
108 static dng_orientation Rotate90CCW ()
109 {
110 return AdobeToDNG (kRotate90CCW);
111 }
112
113 static dng_orientation Mirror ()
114 {
115 return AdobeToDNG (kMirror);
116 }
117
118 static dng_orientation Mirror90CW ()
119 {
120 return AdobeToDNG (kMirror90CW);
121 }
122
123 static dng_orientation Mirror180 ()
124 {
125 return AdobeToDNG (kMirror180);
126 }
127
128 static dng_orientation Mirror90CCW ()
129 {
130 return AdobeToDNG (kMirror90CCW);
131 }
132
133 static dng_orientation Unknown ()
134 {
135 return AdobeToDNG (kUnknown);
136 }
137
138 bool IsValid () const
139 {
140 return fAdobeOrientation < kUnknown;
141 }
142
143 bool NotValid () const
144 {
145 return !IsValid ();
146 }
147
148 bool FlipD () const;
149
150 bool FlipH () const;
151
152 bool FlipV () const;
153
154 bool operator== (const dng_orientation &b) const
155 {
156 return fAdobeOrientation == b.fAdobeOrientation;
157 }
158
159 bool operator!= (const dng_orientation &b) const
160 {
161 return !(*this == b);
162 }
163
164 dng_orientation operator- () const;
165
166 dng_orientation operator+ (const dng_orientation &b) const;
167
168 dng_orientation operator- (const dng_orientation &b) const
169 {
170 return (*this) + (-b);
171 }
172
173 void operator+= (const dng_orientation &b)
174 {
175 *this = *this + b;
176 }
177
178 void operator-= (const dng_orientation &b)
179 {
180 *this = *this - b;
181 }
182
183 };
184
185/******************************************************************************/
186
187#endif
188
189/******************************************************************************/
190