From 29427aa46819561111c1ce31014680f32c0dcab3 Mon Sep 17 00:00:00 2001 From: Mike Wey Date: Mon, 28 Feb 2011 23:48:18 +0100 Subject: Add versions for different Quantum depths --- dmagick/Color.d | 13 +++++++++++-- dmagick/Image.d | 9 +++++++++ dmagick/c/magickType.d | 50 ++++++++++++++++++++++++++++++++++++++++++-------- dmagick/c/quantum.d | 13 ++++++++++--- 4 files changed, 72 insertions(+), 13 deletions(-) (limited to 'dmagick') 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) -- cgit v1.2.3