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

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

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

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Question Как из произвольной картинки получить только области заданного оттенка?

Столкнулся с проблемой, которую не получается пока решить самому.

Есть цветное изображение, представленное в битмапдате. Мне необходимо получить битмапдату с прозрачным (или черным фоном) и оставить на нем только те элементы изображения, которые с некоторой заданной степенью имеют необходимый оттенок, например, зеленый.

В простом случае я могу сравнивать компоненты цвета каждого пикселя с искомыми компонентами, но это слишком затратно.

Я пытался с помощью BitmapData.threshold дважды "пройтись" по изображению (создавая две новые битмапдаты), сначала "отрезая" ниже порога, а во второй "отрезая" выше. Но получается ерунда.

Кто-нибудь может подсказать, в каком направлении двигаться?
__________________
hauts.ru

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
по-моему даже фотошоп это нормально сделать не может

Старый 25.09.2012, 17:39
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 3  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Мне хотя бы до уровня фотошопа, "select color"
__________________
hauts.ru

Старый 25.09.2012, 18:20
Wadimir вне форума Посмотреть профиль Отправить личное сообщение для Wadimir Найти все сообщения от Wadimir
  № 4  
Ответить с цитированием
Wadimir

Регистрация: Nov 2009
Сообщений: 176
по типу этого? http://silin.su/#AS3/bitmap/bucket/bin

Старый 25.09.2012, 19:15
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 5  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Шейдер? У меня есть шейдер хромакея, он убивает заданный цвет. Думаю, если глянуть его реализацию, не составит труда сделать обратное.
Вложения
Тип файла: zip lib.zip (1.3 Кб, 15 просмотров)
__________________
тут я

Старый 25.09.2012, 19:50
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>> пытался с помощью BitmapData.threshold дважды "пройтись" по изображению ..
фишка в том, что анализировать надо покомпонентно и threshold'ом такое не взять
есть такой финт с отрисовкой разницы (BlendMode.DIFFERENCE), усреднением каналов и тогда уже threshold'ом..
насколько это точно по всяким цветовым понятиям не берусь судить, но на глаз похоже
Код AS3:
public class Main extends Sprite
{
	[Embed(source="img.jpg")]
	private var imgClass:Class;
 
	public function Main():void
	{
		stage.scaleMode = StageScaleMode.NO_SCALE;
		var src:Bitmap = new imgClass() as Bitmap;
 
		var clr:uint = 0xFF0000;
		var tol:int = 80;
 
		//разница между оригиналом и цветом
		var clrBmd:BitmapData = new BitmapData(src.width, src.height, false, clr);
		clrBmd.draw(src, null, null, BlendMode.DIFFERENCE);
 
		//загоняем все каналы в синий
		var k:Number = 1 / 3;
		var mtrx:Array = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, k, k, k, 0, 0, 0, 0, 0, 0, 0];
		var filter:ColorMatrixFilter = new ColorMatrixFilter(mtrx);
		clrBmd.applyFilter(clrBmd, clrBmd.rect, new Point(), filter);
 
		// отсекаем, что не попадает в точность
		var resBmd:BitmapData = src.bitmapData.clone();
		resBmd.threshold(clrBmd, clrBmd.rect, new Point, ">", tol, 0x0, 0xFF);
 
		var res:Bitmap = new Bitmap(resBmd);
		res.y = src.height;
 
		addChild(src);
		addChild(res);
	}
}

Старый 25.09.2012, 20:02
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 7  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Спасибо большое, буду разбираться!
__________________
hauts.ru

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Сообщение от silin Посмотреть сообщение
...есть такой финт с отрисовкой разницы (BlendMode.DIFFERENCE)...
Это не тоже самое, что вызвать compare()?
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 27.09.2012, 18:44
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
compare просто минусует, а BlendMode.DIFFERENCE дает разницу между более светлым и более темным
т.е. для 0xFFFFFF будет тоже самое, для других - как получится

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

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

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


 


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


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