From 87157b5c821e05da274abefc48953492140479f8 Mon Sep 17 00:00:00 2001 From: Mike Wey Date: Tue, 27 Sep 2011 22:52:34 +0200 Subject: Add Image.separate --- dmagick/Array.d | 4 +++- dmagick/Image.d | 25 ++++++++++++++++++++++++- 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 -- cgit v1.2.3