Skip to content

Commit 70162e6

Browse files
committed
Merge pull request #549 from aparshin/speedup-getimage
Optimize getImageData()
2 parents 8158a51 + dc8db16 commit 70162e6

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

src/PixelArray.cc

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,19 @@ PixelArray::PixelArray(Canvas *canvas, int sx, int sy, int width, int height):
114114
uint8_t g = *pixel >> 8;
115115
uint8_t b = *pixel;
116116
dst[bx + 3] = a;
117-
float alpha = (float) a / 255;
118-
dst[bx + 0] = (int)((float) r / alpha);
119-
dst[bx + 1] = (int)((float) g / alpha);
120-
dst[bx + 2] = (int)((float) b / alpha);
117+
118+
// Performance optimization: fully transparent/opaque pixels
119+
// can be processed more efficiently
120+
if (a != 0 && a != 255) {
121+
float alpha = (float) a / 255;
122+
dst[bx + 0] = (int)((float) r / alpha);
123+
dst[bx + 1] = (int)((float) g / alpha);
124+
dst[bx + 2] = (int)((float) b / alpha);
125+
} else {
126+
dst[bx + 0] = r;
127+
dst[bx + 1] = g;
128+
dst[bx + 2] = b;
129+
}
121130
}
122131
dst += dstStride;
123132
}

0 commit comments

Comments
 (0)