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

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

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
mikleb, запятые придумали, чтобы они облегчали читать текст, а не для того, чтобы их пропускать.

О логике blendMode.
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 09.06.2008 в 14:51.
Старый 09.06.2008, 15:11
DEAFFF вне форума Посмотреть профиль Отправить личное сообщение для DEAFFF Посетить домашнюю страницу DEAFFF Найти все сообщения от DEAFFF
  № 12  
Ответить с цитированием
DEAFFF
 
Аватар для DEAFFF

Регистрация: Feb 2004
Адрес: Россия, В. Новгород
Сообщений: 255
Отправить сообщение для DEAFFF с помощью ICQ
как????
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир...

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

Регистрация: Feb 2008
Сообщений: 111
Цитата:
Сообщение от DEAFFF Посмотреть сообщение
как????
Через бленд моды

Вот код
Код:
Map1 = new BitmapData(Cmp1Map.width, Cmp1Map.height);
h1 = new BitmapData(Cmp1Map.width, Cmp1Map.height);
h2 = new BitmapData(Cmp1Map.width, Cmp1Map.height);
h = new BitmapData(Cmp1Map.width, Cmp1Map.height);
var redArray:Array = new Array(256);
var greenArray:Array = new Array(256);
var blueArray:Array = new Array(256);

var redArray2:Array = new Array(256);
var greenArray2:Array = new Array(256);
var blueArray2:Array = new Array(256);

redArray[0] = 0x00000000; greenArray[0] = 0x00000000; blueArray[0] = 0x00000000;
redArray2[0] = 0x00FF0000; greenArray2[0] = 0x0000FF00; blueArray2[0] = 0x000000FF;
for (i = 1; i <= 255; i++) 
{
	redArray[i] = 0x00FF0000; greenArray[i] = 0x0000FF00; blueArray[i] = 0x000000FF;
	redArray2[i] = 0x00000000; greenArray2[i] = 0x00000000; blueArray2[i] = 0x00000000;
}

			
t = getTimer();
		
h1.copyPixels(Cmp2Map, new Rectangle (0,0,h1.width,h1.height),new Point(0,0));
h1.draw (Cmp1Map, null, null, "subtract");
h1.paletteMap(h1, new Rectangle (0, 0, h1.width, h1.height), new Point(0, 0), redArray, greenArray, blueArray);
	
h2.copyPixels(Cmp1Map, new Rectangle (0,0,h2.width,h2.height),new Point(0,0));
h2.draw (Cmp2Map, null, null, "subtract");
h2.paletteMap(h2, new Rectangle (0, 0, h2.width, h2.height), new Point(0, 0), redArray2, greenArray2, blueArray2);
	
h.copyChannel(h1, new Rectangle (0, 0, h1.width, h1.height), new Point (0, 0), BitmapDataChannel.BLUE, BitmapDataChannel.GREEN);
h.draw(h2, null, null, "darken");
h.draw(h1, null, null, "lighten");
		
h.copyChannel(h, new Rectangle (0, 0, h.width, h.height), new Point (0, 0), BitmapDataChannel.GREEN, BitmapDataChannel.RED);
h.draw(h2, null, null, "darken");
h.draw(h1, null, null, "lighten");
	
h.copyChannel(h, new Rectangle (0, 0, h.width, h.height), new Point (0, 0), BitmapDataChannel.RED, BitmapDataChannel.ALPHA);
			
Map1 = Cmp1Map.clone();
Map1.copyPixels(Cmp2Map, new Rectangle (0, 0, h.width, h.height), new Point (0, 0), h, null, true);

trace (getTimer() - t);
Сmp1Map, Cmp2Map - две исходные мапы
Map1 - результат сравнения
h,h1,h2 - вспомогательные мапы.


Последний раз редактировалось mikleb; 09.06.2008 в 15:51.
Старый 09.06.2008, 15:50
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 14  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
mikleb, надо использовать кнопку , а не создавать несколько сообщений подряд.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Feb 2004
Адрес: Россия, В. Новгород
Сообщений: 255
Отправить сообщение для DEAFFF с помощью ICQ
mikleb спасибо! ваш способ наиболее быстрый!
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир...

Старый 09.06.2008, 20:43
mikleb вне форума Посмотреть профиль Отправить личное сообщение для mikleb Найти все сообщения от mikleb
  № 16  
Ответить с цитированием
mikleb

Регистрация: Feb 2008
Сообщений: 111
Цитата:
Сообщение от DEAFFF Посмотреть сообщение
mikleb спасибо! ваш способ наиболее быстрый!
Незачто
Но только тут 24битные числа, для 32 битных будет раза в два тормазнее потому что subtract не вычитает альфу, и придется дополнительно получить маски для > и >= альфы.

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

Регистрация: Feb 2004
Адрес: Россия, В. Новгород
Сообщений: 255
Отправить сообщение для DEAFFF с помощью ICQ
да нет все нормально мне хватает 24 битных!
Вот тока не мог бы ты объяснить что это за метод такой ?
Как он работает?
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир...

Старый 10.06.2008, 15:25
mikleb вне форума Посмотреть профиль Отправить личное сообщение для mikleb Найти все сообщения от mikleb
  № 18  
Ответить с цитированием
mikleb

Регистрация: Feb 2008
Сообщений: 111
Цитата:
Сообщение от DEAFFF Посмотреть сообщение
да нет все нормально мне хватает 24 битных!
Вот тока не мог бы ты объяснить что это за метод такой ?
Как он работает?
Нужно получить маску где числа RGB от второй картинки > RGB от первой.
Сперва я получил 3 маски: R от второй > чем R от первой картинки, и тоже самое для G и B, эти три маски удобно хранить в одной картинке. (там где > будет 255 а где <= будет 0). Это легко реализовать с помошью blendmode subtract. Т.е вычтаем из второй картинки первую там где вторая > будет не ноль. Ну а потом с помощью палитры все не нулевые числа(компоненты цвета) переводим в 255. Эти три маски хранятся в h1.
Еще нужно получить такие же маски но только для >=. Ясно что >= это отрицание к <, поэтому делаю тоже самое только картинки меняю местами, ну и палитра инверснутая (там где было 255 делаю 0 там где было 0 делаю 255). Это будет h2.

Пусть теперь надо сравнить картинки только по GB.
G2B2 > G1B1 Если:
G2 > G1 или G1 = G2 и B2>B1 это эквивалентно
G2 > G1 или G2 >= G1 и B2>B1
Получается чтобы получить маску где GB от второй картинки больше GB от первой нужно объединить маску где G2>G1 c маской где G2>=G1 и B2>B1. Вторая маска (где G2>=G1 и B2>B1) это пересечение маски G2>=G1 и маски B2>B1.
Объединение масок делается с помощью blendmode lighten (максимум)
Пересечение масок делается с помощью blendmode darken (минимум).
Ну вот т.е сперва перевожу маску B2>B1 в G компоненту ( c помощью copychannel) потом беру darken с маской G2>=G1 а потом беру lighten с маской где G2>G1.
Дальше аналогично.


Последний раз редактировалось mikleb; 10.06.2008 в 15:39.
Старый 10.06.2008, 18:00
DEAFFF вне форума Посмотреть профиль Отправить личное сообщение для DEAFFF Посетить домашнюю страницу DEAFFF Найти все сообщения от DEAFFF
  № 19  
Ответить с цитированием
DEAFFF
 
Аватар для DEAFFF

Регистрация: Feb 2004
Адрес: Россия, В. Новгород
Сообщений: 255
Отправить сообщение для DEAFFF с помощью ICQ
Да оригинальный способ! Спасибо за объяснение!
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир...

Старый 10.06.2008, 19:00
mikleb вне форума Посмотреть профиль Отправить личное сообщение для mikleb Найти все сообщения от mikleb
  № 20  
Ответить с цитированием
mikleb

Регистрация: Feb 2008
Сообщений: 111
Вобщем можно намного проще сделать, и будет быстре чем в лоб в 7-8 раз.


Последний раз редактировалось mikleb; 12.06.2008 в 21:18.
Создать новую тему Ответ Часовой пояс GMT +4, время: 01:08.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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