PageRenderTime 31ms CodeModel.GetById 23ms app.highlight 6ms RepoModel.GetById 0ms app.codeStats 1ms

/dmagick/c/quantum.d

http://github.com/MikeWey/DMagick
D | 176 lines | 153 code | 20 blank | 3 comment | 28 complexity | 764c3d5d620898cd86991bc753e6ea4a MD5 | raw file
  1module dmagick.c.quantum;
  2
  3import dmagick.c.cacheView;
  4import dmagick.c.exception;
  5import dmagick.c.image;
  6import dmagick.c.magickType;
  7import dmagick.c.magickVersion;
  8
  9extern(C)
 10{
 11	/**
 12	 * The endianess of the image when reading the image file.
 13	 */
 14	enum EndianType
 15	{
 16		UndefinedEndian, /// Not defined (default).
 17		LSBEndian,       /// Little Endian.
 18		MSBEndian        /// Big Endian.
 19	}
 20
 21	enum QuantumAlphaType
 22	{
 23		UndefinedQuantumAlpha,
 24		AssociatedQuantumAlpha,
 25		DisassociatedQuantumAlpha
 26	}
 27
 28	enum QuantumFormatType
 29	{
 30		UndefinedQuantumFormat,
 31		FloatingPointQuantumFormat,
 32		SignedQuantumFormat,
 33		UnsignedQuantumFormat
 34	}
 35
 36	enum QuantumType
 37	{
 38		UndefinedQuantum,
 39		AlphaQuantum,
 40		BlackQuantum,
 41		BlueQuantum,
 42		CMYKAQuantum,
 43		CMYKQuantum,
 44		CyanQuantum,
 45		GrayAlphaQuantum,
 46		GrayQuantum,
 47		GreenQuantum,
 48		IndexAlphaQuantum,
 49		IndexQuantum,
 50		MagentaQuantum,
 51		OpacityQuantum,
 52		RedQuantum,
 53		RGBAQuantum,
 54		BGRAQuantum,
 55		RGBOQuantum,
 56		RGBQuantum,
 57		YellowQuantum,
 58		GrayPadQuantum,
 59		RGBPadQuantum,
 60		CbYCrYQuantum,
 61		CbYCrQuantum,
 62		CbYCrAQuantum,
 63		CMYKOQuantum,
 64		BGRQuantum,
 65		BGROQuantum
 66	}
 67
 68	struct QuantumInfo {}
 69
 70	alias ClampToQuantum RoundToQuantum;
 71	static pure nothrow Quantum ClampToQuantum(const MagickRealType value)
 72	{
 73		static if(MagickHDRISupport)
 74		{
 75			return value;
 76		}
 77		else
 78		{
 79			if (value <= 0.0)
 80				return(cast(Quantum) 0);
 81			if (value >= cast(MagickRealType) QuantumRange)
 82				return(cast(Quantum) QuantumRange);
 83			return(cast(Quantum) (value+0.5));
 84		}
 85	}
 86
 87	static pure nothrow ubyte ScaleQuantumToChar(const Quantum quantum)
 88	{
 89		static if(MagickHDRISupport)
 90		{
 91			if ( quantum <= 0 )
 92				return 0;
 93			static if ( MagickQuantumDepth == 8 )
 94			{
 95				if ( quantum >= 255 )
 96					return 255;
 97				return cast(ubyte)(quantum+0.5);
 98			}
 99			else static if ( MagickQuantumDepth == 16 )
100			{
101				if ( quantum/257 >= 255)
102					return 255;
103				return cast(ubyte)(quantum/257+0.5);
104			}
105			else static if ( MagickQuantumDepth == 32 )
106			{
107				if ( quantum/16843009 >= 255)
108					return 255;
109				return cast(ubyte)(quantum/16843009+0.5);
110			}
111			else
112			{
113				if ( quantum/72340172838076673 >= 255)
114					return 255;
115				return cast(ubyte)(quantum/72340172838076673+0.5);
116			}
117		}
118		else
119		{
120			static if ( MagickQuantumDepth == 8 )
121				return quantum;
122			else static if ( MagickQuantumDepth == 16 )
123				return cast(ubyte) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8);
124			else static if ( MagickQuantumDepth == 32 )
125				return cast(ubyte) (quantum+8421504UL/16843009UL );
126			else
127				return cast(ubyte) (quantum/72340172838076673.0+0.5);
128		}
129	}
130
131	static pure nothrow Quantum ScaleCharToQuantum(ubyte value)
132	{
133		enum Quantum factor = QuantumRange/255;
134
135		return cast(Quantum)(factor*value);
136	}
137
138	static if ( MagickLibVersion >= 0x681 )
139	{
140		EndianType GetQuantumEndian(const(QuantumInfo)*);
141	}
142
143	MagickBooleanType SetQuantumDepth(const(Image)*, QuantumInfo*, const size_t);
144
145	static if ( MagickLibVersion >= 0x681 )
146	{
147		MagickBooleanType SetQuantumEndian(const(Image)*, QuantumInfo*, const EndianType);
148	}
149
150	MagickBooleanType SetQuantumFormat(const(Image)*, QuantumInfo*, const QuantumFormatType);
151	MagickBooleanType SetQuantumPad(const(Image)*, QuantumInfo*, const size_t);
152
153	static if ( MagickLibVersion >= 0x674 )
154	{
155		QuantumFormatType GetQuantumFormat(const(QuantumInfo)*);
156	}
157
158	QuantumInfo* AcquireQuantumInfo(const(ImageInfo)*, Image*);
159	QuantumInfo* DestroyQuantumInfo(QuantumInfo*);
160
161	QuantumType GetQuantumType(Image*, ExceptionInfo*);
162
163	size_t ExportQuantumPixels(const(Image)*, const(CacheView)*, const(QuantumInfo)*, const QuantumType, ubyte*, ExceptionInfo*);
164	size_t GetQuantumExtent(const(Image)*, const(QuantumInfo)*, const QuantumType);
165	size_t ImportQuantumPixels(Image*, CacheView*, const(QuantumInfo)*, const QuantumType, const(ubyte)*, ExceptionInfo*);
166
167	ubyte* GetQuantumPixels(const(QuantumInfo)*);
168
169	void GetQuantumInfo(const(ImageInfo)*, QuantumInfo*);
170	void SetQuantumAlphaType(QuantumInfo*, const QuantumAlphaType);
171	void SetQuantumImageType(Image*, const QuantumType);
172	void SetQuantumMinIsWhite(QuantumInfo*, const MagickBooleanType);
173	void SetQuantumPack(QuantumInfo*, const MagickBooleanType);
174	void SetQuantumQuantum(QuantumInfo*, const size_t);
175	void SetQuantumScale(QuantumInfo*, const double);
176}