/dmagick/c/quantum.d

http://github.com/MikeWey/DMagick · D · 176 lines · 153 code · 20 blank · 3 comment · 28 complexity · 764c3d5d620898cd86991bc753e6ea4a MD5 · raw file

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