Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.06.2013, 13:31
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 1  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
По умолчанию Усечение пикселей в BitmapData (срочно)

Здравствуйте. Прошу помощи в решении задачи по усечению (заданию прозрачности серым и чёрным пикселям). Прилаживаю картинку, есть динамическай битмап дата, которая образ человека окрашивает в различный цвет кроме градаций серого, не нужны все серые, чёрные и белые пиксели. Каким образром можно битмапу очистить от них. Написал вот это
Код AS3:
public function byteArrayToBitmapData(bytes:ByteArray, _canvas:BitmapData, _viewport:BitmapData):void{
 
 
			var calir:Boolean = false;
 
			// прошло ли 5 секунд
			if (new Date().time-_calibr<5000) {
				calir = true;
			}
 
			_canvas.lock();
 
			_viewport.lock();
			_canvas.setPixels(new Rectangle(0,0, as3kinect.IMG_WIDTH, as3kinect.IMG_HEIGHT), bytes);
 
 
			for ( var i=0;i<=as3kinect.IMG_WIDTH; i++) {
				for ( var j=0;j<=as3kinect.IMG_HEIGHT; j++) {
 
					var pixel:uint = _canvas.getPixel(i,j);
 
					if (calir) {
						_test[pixel] = true;
						// если идет время калибровки заполняем массив полученніми пикселями
					} else {
 
						if (setmas) {
							// если плотный массив пуст заполняем его уникальними цветами
							for (var col:String in _test) {
								_vect.push(uint(col));
 
								// в результате примерно 50 пикселей
								trace(col);
							}
 
							setmas = false;
 
						} else {
 
							var nodep:Boolean = true;
 
							// ищем пиксель в калибровочном массиве
							for each( var color_id:uint in _vect)
							{
								if (color_id==pixel) nodep = true;
							}
 
							if (nodep) {
								_viewport.setPixel32(i,j,0xFFFFFF00);
							} else {
								_viewport.setPixel32(i,j,0xFF0000);
							}
 
						}
 
					}/**/
 
				}
			}
 
			_viewport.unlock();
			_canvas.unlock();
 
		}
суть в том что на протяжении первых пяти секунд перебираеться попиксельно получаемая картинка и записуються полученные цвета в массив (первые пять секунд нужно быть не в кадре), потом они заполняют вектор и каждую итерацию сравнивается цвет пикселя в масиве, если на сцене появился человек его перекрашивает в красный и при проходе цикла при сравнии с полученным калибровочном массиве идет перерисовка. Но при такой схеме как только добавляешь цикл проверки на градацию серого флешка начинает жудко глючить. Подскажите как еще можно обесцветить серые чёрные и белые пиксели в альфу 0
Изображения
 
__________________
return this...

Старый 29.06.2013, 13:38
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 2  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
PixelBender
На PB такую программу обработки очень просто сделать. Пишете код в PixelBender, экспортируете во флеш, подключаете как фильтр к битмапе или битмап дате.
__________________
Дети не должны знать о своих родителях

Старый 29.06.2013, 13:47
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 3  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от Tails Посмотреть сообщение
PixelBender
На PB такую программу обработки очень просто сделать. Пишете код в PixelBender, экспортируете во флеш, подключаете как фильтр к битмапе или битмап дате.
посоветуйте мануал максимально подходящий для такого рода задачи
__________________
return this...

Старый 29.06.2013, 13:49
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 4  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
http://habrahabr.ru/post/70246/
http://habrahabr.ru/post/84396/
http://help.adobe.com/ru_RU/as3/dev/...950BBC223.html

Твоя задача вообщем то - изучить работу с PB, научиться внедрять созданный фильтр во флешь. 1 может 2 дня мозгового штурма, и ты станешь на 20% круче. Такая обработка битмапы идеально подходит для учебных целей.

Алгоритм пиксельного шейдера не сложный - получаешь цвет пикселя и на основе каких-то переданных констант решаеш - рисовать его или нет.
__________________
Дети не должны знать о своих родителях

Старый 29.06.2013, 13:56
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 5  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
отлично я думаю то что нужно, только не могу найти как получить значение цвета пикселя и обесцветить его. Если не сложно я думаю тут две строчки, поделитесь ними

Добавлено через 10 минут
я уже впринцепи разобрался что и как. Внедрил без проблем фильтр. Осталось вычитание пикселей. Большое спасибо, действительно мощный инструмент)
__________________
return this...

Старый 29.06.2013, 14:08
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 6  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
PB фильтры разрабатываются в бесплатной программе Pixel Bender, от-туда же экспортируются в формате .pbj для внедрения во флешь.
Сперва скачайте Pixel Bender. В ней есть разные примеры готовых фильтров. И почитайте статьи по ссылкам, саму документацию на сайте адоби на русском.

Получение цвета пикселя производиться как выборка из текстуры на основе текущих координат:
Код:
dst = sampleNearest(src, outCoord());
dst - цвет пикселя:
dst.r - значение красного (0-1)
dst.g - значение зелёного (0-1)
dst.b - значение синего (0-1)
dst.a - прозрачность (0-1)

outCoord() - функция для получения x,y координат текущего пикселя.
src - битмапа из которой производится выборка
__________________
Дети не должны знать о своих родителях

Старый 29.06.2013, 14:11
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 7  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
нашел как перекрашивать, осталось получить значение цвета пикселя

Добавлено через 1 минуту
Цитата:
Сообщение от Tails Посмотреть сообщение
PB фильтры разрабатываются в бесплатной программе Pixel Bender, от-туда же экспортируются в формате .pbj для внедрения во флешь.
Сперва скачайте Pixel Bender. В ней есть разные примеры готовых фильтров. И почитайте статьи по ссылкам, саму документацию на сайте адоби на русском.

Получение цвета пикселя производиться как выборка из текстуры на основе текущих координат:
Код:
dst = sampleNearest(src, outCoord());
dst - цвет пикселя:
dst.r - значение красного (0-1)
dst.g - значение зелёного (0-1)
dst.b - значение синего (0-1)
dst.a - прозрачность (0-1)

outCoord() - функция для получения x,y координат текущего пикселя.
src - битмапа из которой производится выборка
спасибо большое) Я уже скачал, экспортировал и подтянул фильтр. Все работает идеально, вычитаю пиксели, остался только механизм определения градации серого.
__________________
return this...

Старый 29.06.2013, 14:20
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 8  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Найди среднее арифметическое трёх цветовых каналов, если интенсивность красного канала отличается от среднего значения более некоторого порога - рисуешь пиксель, иначе - альфа канал в прозрачность.
__________________
Дети не должны знать о своих родителях

Старый 29.06.2013, 14:24
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 9  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
сделал так, но еще нужно корректировки. Дело в том что там не только крассный, там еще 4-5 цветов, синий, зелённый, желтый. Не могу додумать как опередилить серый это или нет.
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок3.JPG
Просмотров: 114
Размер:	73.2 Кб
ID:	29759  
__________________
return this...

Старый 29.06.2013, 14:29
AlexCooper вне форума Посмотреть профиль Отправить личное сообщение для AlexCooper Найти все сообщения от AlexCooper
  № 10  
Ответить с цитированием
AlexCooper
 
Аватар для AlexCooper

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
блин, читать нужно внимательней))
Цитата:
Найди среднее арифметическое трёх цветовых каналов, если интенсивность красного канала отличается от среднего значения более некоторого порога - рисуешь пиксель, иначе - альфа канал в прозрачность.
еще раз спасибо))
__________________
return this...

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 05:09.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.