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

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

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

Регистрация: Sep 2008
Сообщений: 717
Записей в блоге: 4
Отправить сообщение для Mur4ik с помощью ICQ
Вот что по итогу получилось, может кому пригодится
Код AS3:
 
		/**
		 * Возвращает цвет темнее заданного на указанную величину
		 * @param	$color Исходный цвет
		 * @param	$koeff На сколько делать темнее
		 * @return Результирующий цвет
		 */
		public static function darker( $color:uint, $koeff:Number = .7 ):uint
		{
			var r:Number = 0;
			var g:Number = 0;
			var b:Number = 0;
 
			r = ($color >> 16 & 0xFF) * $koeff;
			g = ($color >> 8 & 0xFF) * $koeff;
			b = ($color & 0xFF) * $koeff;
 
			return r << 16 | g << 8 | b;
		}
 
		/**
		 * Находит среднее значение цвета всего изображения
		 * @param	$source Исходное изображение
		 * @param	$scale масштаб изображения для подсчета цвета
		 * @return результирующий цвет
		 */
		public static function findMedianColour( $source:BitmapData, $scale:Number = .25 ):uint
		{
			var xScale:uint = Math.round( $source.width * $scale );
			var yScale:uint = Math.round( $source.height * $scale );
 
			var mtrx:Matrix = new Matrix();
			var tempBmd:BitmapData = new BitmapData(xScale, yScale);
 
			mtrx.scale($scale,$ scale);
			tempBmd.draw($source, mtrx);
 
			var r:uint = 0;
			var g:uint = 0;
			var b:uint = 0;
 
			var pCount:uint = xScale * yScale;
			var pixel:uint;
 
			for (var px:int = 0; px < xScale; px++)
			{
				for (var py:int = 0; py < yScale; py++)
				{
					pixel = tempBmd.getPixel(px, py);
 
					r += pixel >> 16 & 0xFF;
					g += pixel >> 8 & 0xFF;
					b += pixel & 0xFF;
				}
			}
 
			tempBmd.dispose();
 
			r /= pCount;
			g /= pCount;
			b /= pCount;
 
			return r << 16 | g << 8 | b;
		}
Поправил функцию darker, c умножением каждой компоненты затемнение выглядит более правильно.
__________________
trace("Остановите Землю, я сойду!!!");


Последний раз редактировалось Mur4ik; 04.04.2009 в 07:46.
Старый 04.04.2009, 15:48
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 22  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
Mur4ik, правильно правильно. забыл обратно преобразовать.

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

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

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


 


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


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