summaryrefslogtreecommitdiff
path: root/dmagick/c/quantum.d
diff options
context:
space:
mode:
Diffstat (limited to 'dmagick/c/quantum.d')
-rw-r--r--dmagick/c/quantum.d63
1 files changed, 51 insertions, 12 deletions
diff --git a/dmagick/c/quantum.d b/dmagick/c/quantum.d
index a7b14b3..f86d59c 100644
--- a/dmagick/c/quantum.d
+++ b/dmagick/c/quantum.d
@@ -70,23 +70,62 @@ extern(C)
alias ClampToQuantum RoundToQuantum;
static pure nothrow Quantum ClampToQuantum(const MagickRealType value)
{
- if (value <= 0.0)
- return(cast(Quantum) 0);
- if (value >= cast(MagickRealType) QuantumRange)
- return(cast(Quantum) QuantumRange);
- return(cast(Quantum) (value+0.5));
+ version(MagickCore_HDRI)
+ {
+ return value;
+ }
+ else
+ {
+ if (value <= 0.0)
+ return(cast(Quantum) 0);
+ if (value >= cast(MagickRealType) QuantumRange)
+ return(cast(Quantum) QuantumRange);
+ return(cast(Quantum) (value+0.5));
+ }
}
static pure nothrow ubyte ScaleQuantumToChar(const Quantum quantum)
{
- static if ( MagickQuantumDepth == 8 )
- return quantum;
- else static if ( MagickQuantumDepth == 16 )
- return cast(ubyte) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8);
- else static if ( MagickQuantumDepth == 32 )
- return cast(ubyte) (quantum+8421504UL/16843009UL );
+ version(MagickCore_HDRI)
+ {
+ if ( quantum <= 0 )
+ return 0;
+ static if ( MagickQuantumDepth == 8 )
+ {
+ if ( quantum >= 255 )
+ return 255;
+ return cast(ubyte)(quantum+0.5);
+ }
+ else static if ( MagickQuantumDepth == 16 )
+ {
+ if ( quantum/257 >= 255)
+ return 255;
+ return cast(ubyte)(quantum/257+0.5);
+ }
+ else static if ( MagickQuantumDepth == 32 )
+ {
+ if ( quantum/16843009 >= 255)
+ return 255;
+ return cast(ubyte)(quantum/16843009+0.5);
+ }
+ else
+ {
+ if ( quantum/72340172838076673 >= 255)
+ return 255;
+ return cast(ubyte)(quantum/72340172838076673+0.5);
+ }
+ }
else
- return cast(ubyte) (quantum/72340172838076673.0+0.5);
+ {
+ static if ( MagickQuantumDepth == 8 )
+ return quantum;
+ else static if ( MagickQuantumDepth == 16 )
+ return cast(ubyte) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8);
+ else static if ( MagickQuantumDepth == 32 )
+ return cast(ubyte) (quantum+8421504UL/16843009UL );
+ else
+ return cast(ubyte) (quantum/72340172838076673.0+0.5);
+ }
}
static pure nothrow Quantum ScaleCharToQuantum(ubyte value)