diff options
| author | Mike Wey | 2011-08-01 23:01:57 +0200 |
|---|---|---|
| committer | Mike Wey | 2011-08-01 23:01:57 +0200 |
| commit | c7be75cbe983021f41f63a95ad07f422b6f34845 (patch) | |
| tree | dc20fd95db5f1f575aba6593b2a0f2d4e3eea314 /dmagick/ImageView.d | |
| parent | 05a2449ac7a306b36ede759ac4ab3b4a13374518 (diff) | |
A parallel foreach for the ImageView.
Diffstat (limited to 'dmagick/ImageView.d')
| -rw-r--r-- | dmagick/ImageView.d | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/dmagick/ImageView.d b/dmagick/ImageView.d index 5cad837..e5411a4 100644 --- a/dmagick/ImageView.d +++ b/dmagick/ImageView.d @@ -1,6 +1,10 @@ module dmagick.ImageView; import std.array; +import std.parallelism; +import std.range; +import std.string; +import core.atomic; import dmagick.Color; import dmagick.Exception; @@ -31,7 +35,7 @@ class ImageView Row opIndex(size_t row) { PixelPacket* pixels = - GetAuthenticPixels(image.imageRef, extent.x, extent.y, 1, extent.width, DMagickExceptionInfo()); + GetAuthenticPixels(image.imageRef, extent.x, extent.y + row, 1, extent.width, DMagickExceptionInfo()); return Row(image, pixels[0 .. extent.width]); } @@ -53,6 +57,27 @@ class ImageView int opApply(int delegate(ref Row) dg) { + shared(int) progress; + + foreach ( row; taskPool.parallel(iota(extent.y, extent.y + extent.height)) ) + { + PixelPacket* pixels = + GetAuthenticPixels(image.imageRef, extent.x, row, 1, extent.width, DMagickExceptionInfo()); + + int result = dg(Row(image, pixels[0 .. extent.width])); + + if ( result ) + return result; + + if ( image.imageRef.progress_monitor !is null ) + { + atomicOp!"+="(progress, 1); + image.imageRef.progress_monitor(toStringz("ImageView/" ~ image.filename), progress, extent.height, image.imageRef.client_data); + } + } + + return 0; + //Use UpdateImageViewIterator ? } } |
