summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Wey2011-03-03 22:41:15 +0100
committerMike Wey2011-03-03 22:41:15 +0100
commit6da95a9a211511b17f8bf2ada1b6451623531ee3 (patch)
treef8120d304e71bfc6b555ebc10fa1f1050bf0a5d7
parent29427aa46819561111c1ce31014680f32c0dcab3 (diff)
add more constructors and documantation
-rw-r--r--dmagick/Image.d200
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);
+ }
}