Внесу небольшие поправки, может кому-то пригодится
Цитата:
|
Сообщение от Волгоградец
matrix = matrix.concat([0.4, 0.4, 0.4, 0, 0]);
matrix = matrix.concat([0.4, 0.4, 0.4, 0, 0]);
matrix = matrix.concat([0.4, 0.4, 0.4, 0, 0]);
matrix = matrix.concat([0, 0, 0, 1, 0]);
|
Картинки то станут серыми, но видимо это не совсем корректно.
Наткнулся на сайт:
http://www.microsoft.com/Rus/Msdn/Ac.../Data/439.mspx
Оттуда видно что в grayscale цвет расчитывается как
GrayScale = (77 * R + 150 * G + 28 * B)/ 255
То есть матрица должна принять такой вид:

Код:
matrix = matrix.concat([77/255, 150/255, 25/255, 0, 0]);
matrix = matrix.concat([77/255, 150/255, 25/255, 0, 0]);
matrix = matrix.concat([77/255, 150/255, 25/255, 0, 0]);
matrix = matrix.concat([0, 0, 0, 1, 0]);
Зная это можно легко делать анимацию перехода из grayscale в нормальные цвета и наоборот.
Вот код, может кому пригодится:

Код:
private function MakeGray() {
var matrix:Array = new Array();
var r = 77/255;
var g = 150/255;
var b = 25/255;
matrix = matrix.concat([r*zerokoef+1-zerokoef, g*zerokoef, b*zerokoef, 0, 0]);
matrix = matrix.concat([r*zerokoef, g*zerokoef+1-zerokoef, b*zerokoef, 0, 0]);
matrix = matrix.concat([r*zerokoef, g*zerokoef, b*zerokoef+1-zerokoef, 0, 0]);
matrix = matrix.concat([0, 0, 0, 1, 0]);
var filter:BitmapFilter = new ColorMatrixFilter(matrix);
this.filters = new Array(filter);
}
zerokoef изменяется от 0 до 1.
Если 1 - изображение grayscale. Чем ближе к 0 - тем оно "цветнее".