Home | History | Annotate | Download | only in source
      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 
     25 class 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