diff options
| author | Mike Wey | 2011-02-28 23:48:18 +0100 |
|---|---|---|
| committer | Mike Wey | 2011-02-28 23:48:18 +0100 |
| commit | 29427aa46819561111c1ce31014680f32c0dcab3 (patch) | |
| tree | 20dfcc3beee6697c5dad9e2a22498005a0a82ae1 /dmagick | |
| parent | 846bd1de37e9dfbbcf33f21d86e755ac833c4e5d (diff) | |
Add versions for different Quantum depths
Diffstat (limited to 'dmagick')
| -rw-r--r-- | dmagick/Color.d | 13 | ||||
| -rw-r--r-- | dmagick/Image.d | 9 | ||||
| -rw-r--r-- | dmagick/c/magickType.d | 50 | ||||
| -rw-r--r-- | dmagick/c/quantum.d | 13 |
4 files changed, 72 insertions, 13 deletions
diff --git a/dmagick/Color.d b/dmagick/Color.d index c35b796..982be21 100644 --- a/dmagick/Color.d +++ b/dmagick/Color.d @@ -91,10 +91,19 @@ class Color override string toString() { + static if ( MagickQuantumDepth == 8 ) + string frm = "%02X"; + else static if ( MagickQuantumDepth == 16 ) + string frm = "%04X"; + else + string frm = "%08X"; + if ( pixelPacket.opacity == 0 ) - return format("#%04X%04X%04X", pixelPacket.red, pixelPacket.green, pixelPacket.blue); + frm = "#" ~ frm ~ frm ~ frm; else - return format("#%04X%04X%04X%04X", pixelPacket.red, pixelPacket.green, pixelPacket.blue, pixelPacket.opacity); + frm = "#" ~ frm ~ frm ~ frm ~ frm; + + return format(frm, pixelPacket.red, pixelPacket.green, pixelPacket.blue, pixelPacket.opacity); } /** diff --git a/dmagick/Image.d b/dmagick/Image.d index aadeb17..7fd288e 100644 --- a/dmagick/Image.d +++ b/dmagick/Image.d @@ -43,6 +43,15 @@ class Image read(filename); } + this(Geometry size, Color color) + { + options = new Options(); + options.size = size; + + //Use read to create a cnavas with the spacified color. + read( "canvas:"~ color.toString() ); + } + void read(string filename) { options.filename = filename; diff --git a/dmagick/c/magickType.d b/dmagick/c/magickType.d index 0817bb4..53aeff0 100644 --- a/dmagick/c/magickType.d +++ b/dmagick/c/magickType.d @@ -2,19 +2,53 @@ module dmagick.c.magickType; extern (C) { - alias double MagickRealType; - alias ushort Quantum; - alias uint MagickStatusType; - alias long MagickOffsetType; - alias ulong MagickSizeType; + version(Quantum8) + { + alias ubyte Quantum; + alias double MagickRealType; + + enum MAGICKCORE_QUANTUM_DEPTH = 8; + enum QuantumRange = Quantum.max; + } + else version(Quantum32) + { + alias uint Quantum; + alias double MagickRealType; + + enum MAGICKCORE_QUANTUM_DEPTH = 32; + enum QuantumRange = Quantum.max; + } + else version(Quantum64) + { + static assert(false, "64bit Quantum not implemented, need long double"); - alias int MagickBooleanType; + //alias double Quantum; + //alias long double MagickRealType; + + //enum MAGICKCORE_QUANTUM_DEPTH = 64; + //enum QuantumRange = 18446744073709551615.0; + } + else + { + alias ushort Quantum; + alias double MagickRealType; + + enum MAGICKCORE_QUANTUM_DEPTH = 16; + enum QuantumRange = Quantum.max; + } + + alias uint MagickStatusType; + alias long MagickOffsetType; + alias ulong MagickSizeType; + alias int MagickBooleanType; alias MagickSizeType QuantumAny; - alias QuantumRange TransparentOpacity; + alias QuantumRange TransparentOpacity; + + alias MAGICKCORE_QUANTUM_DEPTH MagickQuantumDepth; enum MaxTextExtent = 4096; - enum QuantumRange = 65535UL; + enum OpaqueOpacity = 0; enum ChannelType { diff --git a/dmagick/c/quantum.d b/dmagick/c/quantum.d index 4186c11..2a48c0a 100644 --- a/dmagick/c/quantum.d +++ b/dmagick/c/quantum.d @@ -68,14 +68,21 @@ extern(C) { if (value <= 0.0) return(cast(Quantum) 0); - if (value >= cast(MagickRealType) 65535UL) - return(cast(Quantum) 65535UL); + if (value >= cast(MagickRealType) QuantumRange) + return(cast(Quantum) QuantumRange); return(cast(Quantum) (value+0.5)); } static pure nothrow ubyte ScaleQuantumToChar(const Quantum quantum) { - return(cast(ubyte) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8)); + 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) |
