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

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

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

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
По умолчанию Усредненный цвет области изображения

Подскажите, пожалуйста, как получить некое среднее значение цвета в Битмапдате или загруженном изображении?

Т.е, например, есть у меня изображение, и я хочу рамку для него перекрашивать в цвет подходящий для этой фотки.

Может кто алгоритмом поможет, может есть уже готовое решение.
__________________
trace("Остановите Землю, я сойду!!!");

Старый 03.04.2009, 02:06
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 2  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
Можно посчитать именно среднее - сложить RGB-значения всех точек в заданной области и поделить на количество точек. До этого можно уменьшить изображение с интерполяцией во временный буфер, чтобы перебирать меньше точек.

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

Регистрация: Jan 2009
Сообщений: 60
Отправить сообщение для serenkiy с помощью ICQ
Можно использовать метод
Код AS3:
public function histogram(hRect:Rectangle = null):Vector.<Vector>
у BitmapData. Он представляет распространение отдельных значений цветовых компонентов изображения (красный, зеленый, синий, альфа). Исходя из гистограммы, находим наиболее распространенное значение компонента (например, красный - AA, зеленый - BB, синий - CC...альфа не трогаем). Совмещаем шестнадцатеричные значения и получаем усредненный цвет - 0xAABBCC. Далее или используем его, или находим его контрастный цвет.
Нахождение контрастного цвета - отнимаем от 0xFFFFFF(белый цвет) найденное значение (в нашем случае 0xAABBCC), итоговый цвет - контрастный (у нас он равен 0x554433).

Добавлено через 4 минуты


Последний раз редактировалось serenkiy; 03.04.2009 в 04:52.
Старый 03.04.2009, 07:32
Mur4ik вне форума Посмотреть профиль Отправить личное сообщение для Mur4ik Найти все сообщения от Mur4ik
  № 4  
Ответить с цитированием
Mur4ik
ветеран форума

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
вот что у меня получилось методом "тупого" нахождения средних значений цветовых компонент
Код AS3:
public function findFrameColour( $source:BitmapData ):uint
{
	var r:Number = 0;
	var g:Number = 0;
	var b:Number = 0;
 
	var pCount:Number = $source.width * $source.height;
	var pixel:Number;
 
	for (var px:int = 0; px < $source.width; px++)
	{
		for (var py:int = 0; py < $source.height; py++)
		{
			pixel = $source.getPixel(px, py);
 
			r += pixel >> 16 & 0xFF;
			g += pixel >> 8 & 0xFF;
			b += pixel & 0xFF;
		}
	}
 
	r /= pCount;
	g /= pCount;
	b /= pCount;
 
	return r << 16 | g << 8 | b;
}
Но не всегда он выдает нормальный результат.
Может есть более гармоничный (в плане результирующего цвета) алгоритм?

С histogram() идея понятна, но это все таки под 10-ку, пока не очень хочется на нее ориентироваться....
__________________
trace("Остановите Землю, я сойду!!!");


Последний раз редактировалось Mur4ik; 03.04.2009 в 07:44.
Старый 03.04.2009, 07:49
VVall вне форума Посмотреть профиль Отправить личное сообщение для VVall Найти все сообщения от VVall
  № 5  
Ответить с цитированием
VVall

Регистрация: Feb 2009
Сообщений: 1,195
Попробуйте всё-же уменьшать изображение перед циклом, а также не перебирать точки в центре изображения (только края некоторой ширины).

Старый 03.04.2009, 13:51
_dm вне форума Посмотреть профиль Отправить личное сообщение для _dm Найти все сообщения от _dm
  № 6  
Ответить с цитированием
_dm

Регистрация: Feb 2009
Сообщений: 23
Можно рисовать битмап в другой, который в 2 раза меньше, потом полученный битмап опять рисовать в уменьшенный в два раза, и т.д. пока не получишь изображение в 1 пиксел =)

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

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
А можно вообще уменьшить до 1 пикселя и взять его цвет
__________________
Griver

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>и т.д. пока не получишь изображение в 1 пиксел =)
а чего не сразу-то
Код AS3:
public function findFrameColour( source:BitmapData ):uint
{
	var mtrx:Matrix = new Matrix();
	mtrx.scale(1 / source.width, 1 / source.height);
	var resBmd:BitmapData = new BitmapData(1, 1);
	resBmd.draw(source, mtrx);
	var res:uint = resBmd.getPixel(0, 0);
	resBmd.dispose();
	return res;
}

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

Регистрация: Feb 2009
Сообщений: 23
mre, silin не, так не сработает, надо постепенно в два раза уменьшать
Кстати, в играх так расчитывается средняя освещенность сцены, когда используется HDR с адаптацией

Вобще, этот метод имеет смысл использовать если рисование картинки происходит при помощи видяхи, а не процессора. Вроде как в 9 и 10 плеере хардварное рисование, поэтому пусть ГПУ сам считает средний цвет =)


Последний раз редактировалось _dm; 03.04.2009 в 14:51.
Старый 03.04.2009, 14:53
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от _dm Посмотреть сообщение
Вроде как в 9 и 10 плеере хардварное рисование
«Вроде как», но действительности не соответствует.

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

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

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


 


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


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