Какие разные подходы существуют в ActionScript 3.0? я нашел эту библиотеку: mojocolors Но это больше для графики цвета я думаю ...Как превратить существующее цветное изображение в черно-белое изображение?
Thx
Какие разные подходы существуют в ActionScript 3.0? я нашел эту библиотеку: mojocolors Но это больше для графики цвета я думаю ...Как превратить существующее цветное изображение в черно-белое изображение?
Thx
var n:Number = 1/3;
var matrix:Array = [n,n,n,0,0,
n,n,n,0,0,
n,n,n,0,0,
0,0,0,1,0];
var cmf:ColorMatrixFilter = new ColorMatrixFilter(matrix);
bitmap.filters = [cmf];
В общем, при условии, что вы начинаете с RGB изображения, конвертировать его в HSI цветового пространства и использовать I (интенсивность).
Чтобы преобразовать изображение в оттенки серого, вам нужно выполнить итерацию по каждому пикселю в буфере изображения и усреднить компонент R, G и B в один объект, а затем дублировать его три раза, чтобы получить новый цвет. псевдо-код (при условии, 8bit цвет):
for each pixel in buffer:
pixel.rgb = ((pixel.red + pixel.green + pixel.blue)/3) * 0x010101;
Я уверен, что вы можете сделать что-то с Adobe, PixelBender для достижения этой цели быстрее.
В качестве альтернативы, интенсивность иногда определяется как максимум (R, G, B). – Dima
Применить фильтр, созданный с помощью этого метода к DisplayObject, который содержит изображение, которое требуется в черно-белом:
public static function createBlackAndWhiteFilter():ColorMatrixFilter {
var rLum:Number = 0.2225;
var gLum:Number = 0.7169;
var bLum:Number = 0.0606;
var bwMatrix:Array = [rLum, gLum, bLum, 0, 0, rLum, gLum, bLum, 0, 0, rLum, gLum, bLum, 0, 0, 0, 0, 0, 1, 0];
return new ColorMatrixFilter(bwMatrix);
}//createBlackAndWhiteFilter
Даже если я не понимаю его полностью, я попробую это! Но: Для чего стоят конкретные значения и почему в массиве требуется ровно 20 значений? Возможно, я не должен много просить и просто использовать его ...: -J – algro
20 значений в массиве должны сделать матрицу 5x4, которая фактически почти такая же, как и те, что были отправлены в этом же вопросе alecmce, только что написано в строке. Различные значения связаны (насколько я знаю) с различной интенсивностью света каждого цвета компонента. Таким образом, вы уменьшаете интенсивность каждого цвета в разных измерениях, чтобы каждый стал оттенком серого. – LopSae
@alecmce: Мы не можем комментировать ответы друг друга, потому что пока у нас еще нет репутации 50 (это ограничивает нас комментариями только для наших собственных ответов). И да, это в основном тот же ответ, который я выяснил недавно. Извини за это.То, что я нашел действительно запутанным, заключается в том, что использование вашей матрицы с 1/3, с 1, и моя матрица производит точно такой же эффект, никаких разных оттенков, никакой разной интенсивности ... так что фактическое значение действительно имеет значение для чего-то? – LopSae
Является ли LopSae точно такой же, как у меня, кроме того, что он изменяет значения яркости? И почему я не могу комментировать ответ LopSae? Очень странно ... Для того, что каждое значение в матрице делает, см: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/filters/ColorMatrixFilter.html – alecmce
@LopSae - Я новый для StackOverflow, не в полной мере разработал все его уникальные слова благодарности! ;) Разница, которую вы видите, может быть очень тонкой в зависимости от исходного изображения. Если вы используете тестовое изображение с относительно яркими, жирными цветами, то разные значения будут иметь меньше видимого эффекта, чем изображение с более тонкими оттенками ... – alecmce
Математика этого не слишком сложна ... для каждого пикселя , он примет красные, зеленые и синие компоненты цвета пикселя и умножит их на первый второй и третий элементы в матрице (в моем случае 1/3 в вашем случае 0,2,0,7,0,1), добавьте их вместе и положите этот результат как красное значение. Затем он принимает одни и те же компоненты цвета пикселя и умножает их на шестой, седьмой и восьмой элементы в матрице, а также устанавливает их как зеленые. Подобно синему с 11, 12 и 13-м. Это создает оттенки серого, потому что в результате части для красного, зеленого и синего одинаковы. – alecmce