colorTransform method

void colorTransform(
  1. Rectangle<num> rectangle,
  2. ColorTransform transform
)

Implementation

void colorTransform(Rectangle<num> rectangle, ColorTransform transform) {
  final isLittleEndianSystem = env.isLittleEndianSystem;

  final redMultiplier = (1024 * transform.redMultiplier).toInt();
  final greenMultiplier = (1024 * transform.greenMultiplier).toInt();
  final blueMultiplier = (1024 * transform.blueMultiplier).toInt();
  final alphaMultiplier = (1024 * transform.alphaMultiplier).toInt();

  final redOffset = transform.redOffset;
  final greenOffset = transform.greenOffset;
  final blueOffset = transform.blueOffset;
  final alphaOffset = transform.alphaOffset;

  final mulitplier0 = isLittleEndianSystem ? redMultiplier : alphaMultiplier;
  final mulitplier1 = isLittleEndianSystem ? greenMultiplier : blueMultiplier;
  final mulitplier2 = isLittleEndianSystem ? blueMultiplier : greenMultiplier;
  final mulitplier3 = isLittleEndianSystem ? alphaMultiplier : redMultiplier;

  final offset0 = isLittleEndianSystem ? redOffset : alphaOffset;
  final offset1 = isLittleEndianSystem ? greenOffset : blueOffset;
  final offset2 = isLittleEndianSystem ? blueOffset : greenOffset;
  final offset3 = isLittleEndianSystem ? alphaOffset : redOffset;

  final renderTextureQuad = bitmapData.renderTextureQuad.cut(rectangle);
  final imageData = renderTextureQuad.getImageData();
  final data = imageData.data;

  for (var i = 0; i <= data.length - 4; i += 4) {
    final c0 = data[i + 0];
    final c1 = data[i + 1];
    final c2 = data[i + 2];
    final c3 = data[i + 3];

    data[i + 0] = offset0 + (((c0 * mulitplier0) | 0) >> 10);
    data[i + 1] = offset1 + (((c1 * mulitplier1) | 0) >> 10);
    data[i + 2] = offset2 + (((c2 * mulitplier2) | 0) >> 10);
    data[i + 3] = offset3 + (((c3 * mulitplier3) | 0) >> 10);
  }

  renderTextureQuad.putImageData(imageData);
}