colorIndexInverseTransformAlpha method

void colorIndexInverseTransformAlpha(
  1. int yStart,
  2. int yEnd,
  3. InputBuffer src,
  4. InputBuffer dst,
)

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++;
      }
    }
  }
}