Показать сообщение отдельно
Старый 07.08.2008, 00:23
Division вне форума Посмотреть профиль Отправить личное сообщение для Division Найти все сообщения от Division
  № 9  
Ответить с цитированием
Division
 
Аватар для Division

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Внесу небольшие поправки, может кому-то пригодится
Цитата:
Сообщение от Волгоградец
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 - тем оно "цветнее".
__________________
while(1) {}


Последний раз редактировалось Division; 07.08.2008 в 00:32.