summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Wey2011-09-19 23:01:35 +0200
committerMike Wey2011-09-19 23:01:35 +0200
commit6af7568675e3fce883a1d08878dfef7f4e412053 (patch)
tree78fe6bc0c1dec6d5c5958e94a61a0352f3bc930f
parent6e186769980be473eb17e8f3abc28a56432041cd (diff)
Reuse the Color in Pixels.opApply, Creating a new color every time considerably slows down the loop.
-rw-r--r--dmagick/Color.d10
-rw-r--r--dmagick/ImageView.d5
2 files changed, 13 insertions, 2 deletions
diff --git a/dmagick/Color.d b/dmagick/Color.d
index 94b6906..7223d81 100644
--- a/dmagick/Color.d
+++ b/dmagick/Color.d
@@ -79,11 +79,19 @@ class Color
this.packet = packet;
}
- PixelPacket pixelPacket()
+ package PixelPacket pixelPacket() const
{
return *packet;
}
+ package void pixelPacket(PixelPacket packet)
+ {
+ this.packet.red = packet.red;
+ this.packet.green = packet.green;
+ this.packet.blue = packet.blue;
+ this.packet.opacity = packet.opacity;
+ }
+
override bool opEquals(Object obj)
{
Color color = cast(Color)obj;
diff --git a/dmagick/ImageView.d b/dmagick/ImageView.d
index fbce73c..709c81f 100644
--- a/dmagick/ImageView.d
+++ b/dmagick/ImageView.d
@@ -362,9 +362,12 @@ struct Pixels
*/
int opApply(int delegate(ref Color) dg)
{
+ Color color = new Color();
+
foreach ( ref PixelPacket pixel; pixels )
{
- Color color = new Color(pixel);
+ color.pixelPacket = pixel;
+
int result = dg(color);
pixel = color.pixelPacket;