Я думаю, что самый простой способ сделать это - использовать два последовательных цветовых фильтра. То есть:
var n:Number = 0.9;
var off:Number = 0x80;
var filter:ColorMatrixFilter = new ColorMatrixFilter( [
1, 0, 0, 0, -off,
0, 1, 0, 0, -off,
0, 0, 1, 0, -off,
0, 0, 0, 1, -off ] );
var filter2:ColorMatrixFilter = new ColorMatrixFilter( [
n, 0, 0, 0, off,
0, n, 0, 0, off,
0, 0, n, 0, off,
0, 0, 0, n, off ] );
function onFrame( e:Event ) {
myBMD.applyFilter( myBMD, myBMD.rect, new Point(), filter );
myBMD.applyFilter( myBMD, myBMD.rect, new Point(), filter2 );
}
Первый фильтр смещает значение каждого канала вниз на 128 - превращая ваше серое изображение в черное. Второй фильтр умножает значение каждого канала на модулятор (0,9 в моем примере), а затем смещает значения обратно на 128.