summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Wey2011-11-19 12:14:44 +0100
committerMike Wey2011-11-19 12:14:44 +0100
commitefe1545a6b7dc952489308c1e395f71cbb5bc8f4 (patch)
tree314114b17ae9ebb448efac025041640485bc48e8
parentf5d4e20d1ec4ee8ccd66b80ab899d55928c1520a (diff)
Fix problems with ImageMagick 6.6.0.
-rw-r--r--dmagick/Array.d11
-rw-r--r--dmagick/Image.d41
2 files changed, 38 insertions, 14 deletions
diff --git a/dmagick/Array.d b/dmagick/Array.d
index 8ff60f7..62f17fa 100644
--- a/dmagick/Array.d
+++ b/dmagick/Array.d
@@ -66,8 +66,15 @@ Image average(Image[] images)
linkImages(images);
scope(exit) unlinkImages(images);
- MagickCoreImage* image =
- EvaluateImages(images[0].imageRef, MagickEvaluateOperator.MeanEvaluateOperator, DMagickExceptionInfo());
+ static if ( is(typeof(EvaluateImages)) )
+ {
+ MagickCoreImage* image =
+ EvaluateImages(images[0].imageRef, MagickEvaluateOperator.MeanEvaluateOperator, DMagickExceptionInfo());
+ }
+ else
+ {
+ MagickCoreImage* image = AverageImages(images[0].imageRef, DMagickExceptionInfo());
+ }
return new Image(image);
}
diff --git a/dmagick/Image.d b/dmagick/Image.d
index f407389..649106f 100644
--- a/dmagick/Image.d
+++ b/dmagick/Image.d
@@ -809,23 +809,40 @@ class Image
if ( matrix.length > 6 || matrix[0].length > 6 )
throw new DMagickException("Matrix must be 6x6 or smaller.");
- KernelInfo* kernelInfo = AcquireKernelInfo("1");
- scope(exit) DestroyKernelInfo(kernelInfo);
+ static if ( is(typeof(ColorMatrixImage)) )
+ {
+ KernelInfo* kernelInfo = AcquireKernelInfo("1");
+ scope(exit) DestroyKernelInfo(kernelInfo);
- kernelInfo.width = matrix[0].length;
- kernelInfo.height = matrix.length;
- kernelInfo.values = cast(double*)AcquireQuantumMemory(kernelInfo.width*kernelInfo.height, double.sizeof);
- scope(exit) kernelInfo.values = cast(double*)RelinquishMagickMemory(kernelInfo.values);
+ kernelInfo.width = matrix[0].length;
+ kernelInfo.height = matrix.length;
+ kernelInfo.values = cast(double*)AcquireQuantumMemory(kernelInfo.width*kernelInfo.height, double.sizeof);
+ scope(exit) kernelInfo.values = cast(double*)RelinquishMagickMemory(kernelInfo.values);
- foreach ( i, row; matrix )
- {
- size_t offset = i * row.length;
+ foreach ( i, row; matrix )
+ {
+ size_t offset = i * row.length;
- kernelInfo.values[offset .. offset+row.length] = row;
+ kernelInfo.values[offset .. offset+row.length] = row;
+ }
+
+ MagickCoreImage* image =
+ ColorMatrixImage(imageRef, kernelInfo, DMagickExceptionInfo());
}
+ else
+ {
+ double[] values;
- MagickCoreImage* image =
- ColorMatrixImage(imageRef, kernelInfo, DMagickExceptionInfo());
+ foreach ( i, row; matrix )
+ {
+ size_t offset = i * row.length;
+
+ values[offset .. offset+row.length] = row;
+ }
+
+ MagickCoreImage* image =
+ RecolorImage(imageRef, matrix.length, values.ptr, DMagickExceptionInfo());
+ }
imageRef = ImageRef(image);
}