summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Wey2011-09-27 22:52:34 +0200
committerMike Wey2011-09-27 22:52:34 +0200
commit87157b5c821e05da274abefc48953492140479f8 (patch)
treefe452299332efbad2d20971223f2b4b3ed5dc797
parent0927a16764b5ccd2ea7275bb26da8c097ce40929 (diff)
Add Image.separate
-rw-r--r--dmagick/Array.d4
-rw-r--r--dmagick/Image.d25
2 files changed, 27 insertions, 2 deletions
diff --git a/dmagick/Array.d b/dmagick/Array.d
index 52f5f9f..6dacdc5 100644
--- a/dmagick/Array.d
+++ b/dmagick/Array.d
@@ -231,13 +231,15 @@ Image mergeLayers(Image[] layers, ImageLayerMethod method = ImageLayerMethod.Fla
*
* To add labels to the tiles, assign a "Label" property to each image.
*/
-Image montage(Image[] images, Montage montageInfo)
+Image[] montage(Image[] images, Montage montageInfo)
{
linkImages(images);
scope(exit) unlinkImages(images);
MagickCoreImage* image =
MontageImages(images[0].imageRef, montageInfo.montageInfoRef, DMagickExceptionInfo());
+
+ return imageListToArray(image);
}
/**
diff --git a/dmagick/Image.d b/dmagick/Image.d
index 9b565ce..f2012f3 100644
--- a/dmagick/Image.d
+++ b/dmagick/Image.d
@@ -2455,7 +2455,30 @@ class Image
imageRef = ImageRef(image);
}
- //TODO: implement separate, returns a range of images.
+ /**
+ * Constructs a grayscale image for each channel specified.
+ */
+ Image[] separate(ChannelType channel = ChannelType.DefaultChannels)
+ {
+ Image[] images;
+
+ if ( channel & ChannelType.RedChannel != 0 )
+ images ~= new Image( SeparateImageChannel(imageRef, ChannelType.RedChannel) );
+ else if ( channel & ChannelType.GreenChannel != 0 )
+ images ~= new Image( SeparateImageChannel(imageRef, ChannelType.GreenChannel) );
+ else if ( channel & ChannelType.BlueChannel != 0 )
+ images ~= new Image( SeparateImageChannel(imageRef, ChannelType.BlueChannel) );
+ else if ( channel & ChannelType.OpacityChannel != 0 )
+ images ~= new Image( SeparateImageChannel(imageRef, ChannelType.OpacityChannel) );
+ else if ( channel & ChannelType.TrueAlphaChannel != 0 )
+ images ~= new Image( SeparateImageChannel(imageRef, ChannelType.TrueAlphaChannel) );
+ else if ( channel & ChannelType.GrayChannels != 0 )
+ images ~= new Image( SeparateImageChannel(imageRef, ChannelType.GrayChannels) );
+
+ DMagickException.throwException(&(imageRef.exception));
+
+ return images;
+ }
/**
* applies a special effect to the image, similar to the effect achieved