apply method
Implementation
@override
void apply(BitmapData bitmapData, [Rectangle<num>? rectangle]) {
final renderTextureQuad = rectangle == null
? bitmapData.renderTextureQuad
: bitmapData.renderTextureQuad.cut(rectangle);
final sourceImageData = hideObject == false || knockout
? renderTextureQuad.getImageData()
: null;
final imageData = renderTextureQuad.getImageData();
final List<int> data = imageData.data;
final width = imageData.width;
final height = imageData.height;
final shiftX = (distance * cos(angle)).round();
final shiftY = (distance * sin(angle)).round();
final pixelRatio = renderTextureQuad.pixelRatio;
final blurX = (this.blurX * pixelRatio).round();
final blurY = (this.blurY * pixelRatio).round();
final alphaChannel =
BitmapDataChannel.getCanvasIndex(BitmapDataChannel.ALPHA);
final stride = width * 4;
shiftChannel(data, 3, width, height, shiftX, shiftY);
for (var x = 0; x < width; x++) {
blur(data, x * 4 + alphaChannel, height, stride, blurY);
}
for (var y = 0; y < height; y++) {
blur(data, y * stride + alphaChannel, width, 4, blurX);
}
if (knockout) {
setColorKnockout(data, color, sourceImageData!.data);
} else if (hideObject) {
setColor(data, color);
} else {
setColorBlend(data, color, sourceImageData!.data);
}
renderTextureQuad.putImageData(imageData);
}