colorIndexInverseTransformAlpha method
Implementation
void colorIndexInverseTransformAlpha(
int yStart, int yEnd, InputBuffer src, InputBuffer dst) {
final bitsPerPixel = 8 >> bits;
final width = xsize;
final colorMap = data;
if (bitsPerPixel < 8) {
final pixelsPerByte = 1 << bits;
final countMask = pixelsPerByte - 1;
final bit_mask = (1 << bitsPerPixel) - 1;
for (var y = yStart; y < yEnd; ++y) {
var packed_pixels = 0;
for (var x = 0; x < width; ++x) {
// We need to load fresh 'packed_pixels' once every
// 'pixels_per_byte' increments of x. Fortunately, pixels_per_byte
// is a power of 2, so can just use a mask for that, instead of
// decrementing a counter.
if ((x & countMask) == 0) {
packed_pixels = _getAlphaIndex(src[0]);
src.offset++;
}
final p = _getAlphaValue(colorMap![packed_pixels & bit_mask]);
dst[0] = p;
dst.offset++;
packed_pixels >>= bitsPerPixel;
}
}
} else {
for (var y = yStart; y < yEnd; ++y) {
for (var x = 0; x < width; ++x) {
final index = _getAlphaIndex(src[0]);
src.offset++;
dst[0] = _getAlphaValue(colorMap![index]);
dst.offset++;
}
}
}
}