diff options
Diffstat (limited to 'dmagick')
| -rw-r--r-- | dmagick/Image.d | 200 |
1 files changed, 196 insertions, 4 deletions
diff --git a/dmagick/Image.d b/dmagick/Image.d index 7fd288e..652cfb0 100644 --- a/dmagick/Image.d +++ b/dmagick/Image.d @@ -1,6 +1,4 @@ /** - * The image - * * Copyright: Mike Wey 2011 * License: To be determined * Authors: Mike Wey @@ -8,23 +6,31 @@ module dmagick.Image; +import std.string; + +import dmagick.Color; import dmagick.Exception; +import dmagick.Geometry; import dmagick.Options; import dmagick.Utils; +import dmagick.c.blob; import dmagick.c.constitute; import dmagick.c.exception; import dmagick.c.image; - +/** + * The image + */ class Image { alias dmagick.c.image.Image MagickCoreImage; alias RefCounted!( DestroyImage, MagickCoreImage ) ImageRef; ImageRef imageRef; - Options options; + Options options; ///The options for this image. + /// this() { options = new Options(); @@ -37,12 +43,19 @@ class Image imageRef = ImageRef(image); } + /** + * Construct an Image by reading from the file or + * URL specified by filename. + */ this(string filename) { options = new Options(); read(filename); } + /** + * Construct a blank image with the specified color. + */ this(Geometry size, Color color) { options = new Options(); @@ -52,6 +65,83 @@ class Image read( "canvas:"~ color.toString() ); } + /** + * Construct an image from an in-memory blob. + * The Blob size, depth and magick format may also be specified. + * + * Some image formats require size to be specified, + * the default depth Imagemagick uses is the Quantum size + * it's compiled with. If it doesn't match the depth of the image + * it may need to be specified. + * + * Imagemagick can usualy detect the image format, when the + * format can't be detected a magick format must be specified. + */ + this(void[] blob) + { + options = new Options(); + + read(blob); + } + + ///ditto + this(void[] blob, Geometry size) + { + options = new Options(); + + read(blob, size); + } + + ///ditto + this(void[] blob, Geometry size, size_t depth) + { + options = new Options(); + + read(blob, size, depth); + } + + ///ditto + this(void[] blob, Geometry size, size_t depth, string magick) + { + options = new Options(); + + read(blob, size, depth, magick); + } + + ///ditto + this(void[] blob, Geometry size, string magick) + { + options = new Options(); + + read(blob, size, magick); + } + + /** + * Constructs an image from an array of pixels. + * + * Params: + * width = The number of columns in the image. + * height = The number of rows in the image. + * map = A string describing the expected ordering + * of the pixel array. It can be any combination + * or order of R = red, G = green, B = blue, A = alpha + * , C = cyan, Y = yellow, M = magenta, K = black, + * or I = intensity (for grayscale). + * storage = The pixel Staroage type (CharPixel, + * ShortPixel, IntegerPixel, FloatPixel, or DoublePixel). + * pixels = The pixel data. + */ + this(size_t columns, size_t rows, string map, StorageType storage, void[] pixels) + { + options = new Options(); + + read(columns, rows, map, storage, pixels); + } + + /** + * Read an Image by reading from the file or + * URL specified by filename. + */ void read(string filename) { options.filename = filename; @@ -64,4 +154,106 @@ class Image imageRef = ImageRef(image); DestroyExceptionInfo(exception); } + + /** + * Read an Image by reading from the file or + * URL specified by filename with the specified size. + * Usefull for images that don't specify their size. + */ + void read(string filename, Geometry size) + { + options.size = size; + read(filename); + } + + /** + * Reads an image from an in-memory blob. + * The Blob size, depth and magick format may also be specified. + * + * Some image formats require size to be specified, + * the default depth Imagemagick uses is the Quantum size + * it's compiled with. If it doesn't match the depth of the image + * it may need to be specified. + * + * Imagemagick can usualy detect the image format, when the + * format can't be detected a magick format must be specified. + */ + void read(void[] blob) + { + ExceptionInfo* exception = AcquireExceptionInfo(); + MagickCoreImage* image = + BlobToImage(options.imageInfo, blob.ptr, blob.length, exception); + + DMagickException.throwException(exception); + + imageRef = ImageRef(image); + DestroyExceptionInfo(exception); + } + + ///ditto + void read(void[] blob, Geometry size) + { + options.size = size; + + read(blob); + } + + ///ditto + void read(void[] blob, Geometry size, size_t depth) + { + options.size = size; + options.depth = depth; + + read(blob); + } + + ///ditto + void read(void[] blob, Geometry size, size_t depth, string magick) + { + options.size = size; + options.depth = depth; + options.magick = magick; + //Also set the filename to the image format + options.filename = magick ~":"; + + read(blob); + } + + ///ditto + void read(void[] blob, Geometry size, string magick) + { + options.size = size; + options.magick = magick; + //Also set the filename to the image format + options.filename = magick ~":"; + + read(blob); + } + + /** + * Reads an image from an array of pixels. + * + * Params: + * width = The number of columns in the image. + * height = The number of rows in the image. + * map = A string describing the expected ordering + * of the pixel array. It can be any combination + * or order of R = red, G = green, B = blue, A = alpha + * , C = cyan, Y = yellow, M = magenta, K = black, + * or I = intensity (for grayscale). + * storage = The pixel Staroage type (CharPixel, + * ShortPixel, IntegerPixel, FloatPixel, or DoublePixel). + * pixels = The pixel data. + */ + void read(size_t width, size_t height, string map, StorageType storage, void[] pixels) + { + ExceptionInfo* exception = AcquireExceptionInfo(); + MagickCoreImage* image = + ConstituteImage(width, height, toStringz(map), storage, pixels.ptr, exception); + + DMagickException.throwException(exception); + + imageRef = ImageRef(image); + DestroyExceptionInfo(exception); + } } |
