| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- /*
- Copyright 1999 ImageMagick Studio LLC, a non-profit organization
- dedicated to making software imaging solutions freely available.
- You may not use this file except in compliance with the License. You may
- obtain a copy of the License at
- https://imagemagick.org/script/license.php
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- MagickCore quantum inline methods.
- */
- #ifndef MAGICKCORE_QUANTUM_H
- #define MAGICKCORE_QUANTUM_H
- #include <float.h>
- #include "magick/image.h"
- #include "magick/semaphore.h"
- #if defined(__cplusplus) || defined(c_plusplus)
- extern "C" {
- #endif
- #define RoundToQuantum(quantum) ClampToQuantum(quantum)
- typedef enum
- {
- UndefinedEndian,
- LSBEndian,
- MSBEndian
- } EndianType;
- typedef enum
- {
- UndefinedQuantumAlpha,
- AssociatedQuantumAlpha,
- DisassociatedQuantumAlpha
- } QuantumAlphaType;
- typedef enum
- {
- UndefinedQuantumFormat,
- FloatingPointQuantumFormat,
- SignedQuantumFormat,
- UnsignedQuantumFormat
- } QuantumFormatType;
- typedef enum
- {
- UndefinedQuantum,
- AlphaQuantum,
- BlackQuantum,
- BlueQuantum,
- CMYKAQuantum,
- CMYKQuantum,
- CyanQuantum,
- GrayAlphaQuantum,
- GrayQuantum,
- GreenQuantum,
- IndexAlphaQuantum,
- IndexQuantum,
- MagentaQuantum,
- OpacityQuantum,
- RedQuantum,
- RGBAQuantum,
- BGRAQuantum,
- RGBOQuantum,
- RGBQuantum,
- YellowQuantum,
- GrayPadQuantum, /* deprecated */
- RGBPadQuantum,
- CbYCrYQuantum,
- CbYCrQuantum,
- CbYCrAQuantum,
- CMYKOQuantum,
- BGRQuantum,
- BGROQuantum
- } QuantumType;
- typedef struct _QuantumInfo
- QuantumInfo;
- static inline Quantum ClampToQuantum(const MagickRealType quantum)
- {
- #if defined(MAGICKCORE_HDRI_SUPPORT)
- return((Quantum) quantum);
- #else
- if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
- return((Quantum) 0);
- if (quantum >= (MagickRealType) QuantumRange)
- return(QuantumRange);
- return((Quantum) (quantum+0.5));
- #endif
- }
- #if (MAGICKCORE_QUANTUM_DEPTH == 8)
- static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
- {
- #if !defined(MAGICKCORE_HDRI_SUPPORT)
- return((unsigned char) quantum);
- #else
- if ((IsNaN(quantum) != 0) || (quantum <= 0.0f))
- return(0);
- if (quantum >= 255.0)
- return(255);
- return((unsigned char) (quantum+0.5f));
- #endif
- }
- #elif (MAGICKCORE_QUANTUM_DEPTH == 16)
- static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
- {
- #if !defined(MAGICKCORE_HDRI_SUPPORT)
- return((unsigned char) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8));
- #else
- if ((IsNaN(quantum) != 0) || (quantum <= 0.0f))
- return(0);
- if ((quantum/257.0f) >= 255.0f)
- return(255);
- return((unsigned char) (quantum/257.0f+0.5f));
- #endif
- }
- #elif (MAGICKCORE_QUANTUM_DEPTH == 32)
- static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
- {
- #if !defined(MAGICKCORE_HDRI_SUPPORT)
- return((unsigned char) ((quantum+MagickULLConstant(8421504))/
- MagickULLConstant(16843009)));
- #else
- if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
- return(0);
- if ((quantum/16843009.0) >= 255.0)
- return(255);
- return((unsigned char) (quantum/16843009.0+0.5));
- #endif
- }
- #elif (MAGICKCORE_QUANTUM_DEPTH == 64)
- static inline unsigned char ScaleQuantumToChar(const Quantum quantum)
- {
- #if !defined(MAGICKCORE_HDRI_SUPPORT)
- return((unsigned char) (quantum/72340172838076673.0+0.5));
- #else
- if ((IsNaN(quantum) != 0) || (quantum <= 0.0))
- return(0);
- if ((quantum/72340172838076673.0) >= 255.0)
- return(255);
- return((unsigned char) (quantum/72340172838076673.0+0.5));
- #endif
- }
- #endif
- extern MagickExport EndianType
- GetQuantumEndian(const QuantumInfo *);
- extern MagickExport MagickBooleanType
- SetQuantumDepth(const Image *,QuantumInfo *,const size_t),
- SetQuantumEndian(const Image *,QuantumInfo *,const EndianType),
- SetQuantumFormat(const Image *,QuantumInfo *,const QuantumFormatType),
- SetQuantumPad(const Image *,QuantumInfo *,const size_t);
- extern MagickExport QuantumFormatType
- GetQuantumFormat(const QuantumInfo *);
- extern MagickExport QuantumInfo
- *AcquireQuantumInfo(const ImageInfo *,Image *),
- *DestroyQuantumInfo(QuantumInfo *);
- extern MagickExport QuantumType
- GetQuantumType(Image *,ExceptionInfo *);
- extern MagickExport size_t
- ExportQuantumPixels(const Image *,const CacheView *,const QuantumInfo *,
- const QuantumType,unsigned char *magick_restrict,ExceptionInfo *),
- GetQuantumExtent(const Image *,const QuantumInfo *,const QuantumType),
- ImportQuantumPixels(Image *,CacheView *,const QuantumInfo *,const QuantumType,
- const unsigned char *magick_restrict,ExceptionInfo *);
- extern MagickExport unsigned char
- *GetQuantumPixels(const QuantumInfo *);
- extern MagickExport void
- GetQuantumInfo(const ImageInfo *,QuantumInfo *),
- SetQuantumAlphaType(QuantumInfo *,const QuantumAlphaType),
- SetQuantumImageType(Image *,const QuantumType),
- SetQuantumMinIsWhite(QuantumInfo *,const MagickBooleanType),
- SetQuantumPack(QuantumInfo *,const MagickBooleanType),
- SetQuantumQuantum(QuantumInfo *,const size_t),
- SetQuantumScale(QuantumInfo *,const double);
- #if defined(__cplusplus) || defined(c_plusplus)
- }
- #endif
- #endif
|