Molecula
28.08.2007, 15:36
Добрый день.
Задача такая:
"Нужно узнать количество черных, серых и белых пикселей в подгружаемой картинке".
Как делаю:
Создаю Битмап, отрисовываю подгруженный мувик(куда загрузилась картинка), атачу в битмап, удалаяю оригинал - остается мув со сглаженной картинкой.
Через
getPixel
прохожусь по картинке.
В классе Битмапа не нашел другого метода, который бы возвращал значение пикселя
НО! Это ладно если она 100 на 100, в основном будут грузиться от 1250 на 1100 и выше, тогда комп просто виснет.
Получается, что он ему нужно проделать 1250*1100 итераций.
Как граммотно сделать подсчет пикселей определенного цвета?
Или подскажите где, копать (желательно АС2)
Molecula
28.08.2007, 16:46
Но BitmapData.threshold заменяет пиксели определенного цвета на другой, как же он сможет подсчитать сколько пикселей в картинке со значением "ffff00" ?
Так метод возращает число перекрашеных пикслей.
Molecula
28.08.2007, 16:52
Returns
Number - The number of pixels that were changed.
:eek:
Упс! Не внимательный был, проглядел.
Molecula
29.08.2007, 16:25
Да бы не создавать новую тему - продолжу тут.
Может тут соберется небольшая, но полезная кучка материала.
Что делаю вообще? - строю гистрограмму, как в фотопопе.
Когда-то просил помощи, линков...__etc дал пару инетересных урлов, хороших урлов, но увы, я делаю дополнительный модуль к проекту, который написали какие-то челы из Бобруйска.
iNils дал намек на
threshold
в Битмапдате, который возвращает кол-во замененных пикселей.
Дейсвительно, у меня получилось построить гистограмму - на 99% похожую как в Фотошопе.
Как делал.
Я беру в цикле от 1 до 256 каждый пиксель битмапы, которая есть градиент от черного до белого, после этого я применяю
threshold
к своей основной картинке (той, для которой я строю гистограмму) и заменаяю там пиксели - возвращая их количество.
Потом в мувике клонирую СТОЛБЕЦ (у него сейчас высота=1) и приравниваю к его высоте вот то кол-во замещенных пикселей.
Всё круто,...почти.
Получается, что я построил такую байду - ТОЛЬКО для монохромных изображений, я не учитывал остальные цвета.
Начал читать дальше.
Наткнулся на изречение, что "PaletteMap is fast" т.е. она работает быстрее threshold-а.
В хелпе сказано, что с помощью BitmapData.paletteMap method можно строить Уровни, я так понимаю, что те уровни, что и Ctrl+L in Photoshop.
Собственно, как Фотопоп строит уровни?
Я так понимаю, что он берет каждый канал, и пробиват от белого до черного для Красного, Синего, Зеленого - Яркость данного цвета и строит гистграммы, а потом совмещает их и строит общую.
Я пробовал строить тем методом, что я делал для монохромного изображения - получается фигня (я брал пиксели от белого до черного по красному, синему и зеленому).
Но перед тем, как брать пиксели я использовал
var matrix:Array = new Array();
matrix = matrix.concat([0, 0, 0, 0, 0]); // red
matrix = matrix.concat([0, 0, 0, 0, 0]); // green
matrix = matrix.concat([0, 0, 1, 0, 0]); // blue
matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha
var filter:BitmapFilter = new ColorMatrixFilter(matrix);
_bmp.filters = new Array(filter);
Т.е. я отображал в трех каналах изображание, делал копии (отрисовывал три) и по ним проходился по 255 раз :eek: ...мда..
BitmapData.paletteMap method - я так понял, что в массивах он хранит значения от самого яркого красного до самого темного красного, и так далее по остальным каналам или нет?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.