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

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

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

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

Привет!

Есть два объекта BitmapData одинакового размера(bmp1 и bmp2). На них что то нарисовано, это может быть и картинка, не важно.

Нужно получить третий объект BitmapData (bmp3) являющийся результатом сложения двух первых, с таким условием:

Код:
if(bmp2.getPixel(x,y) > bmp1.getPixel(x,y))
{
      bmp3.setPixel(x,y, bmp2.getPixel(x,y));
}
Можно конечно без проблем пробежаться по всем точкам, но это будет очень медленно.

Меня интересует способ сложения BitmapData , будь то комбинация BlendMode или фильтр... или бог знает что

Заранее спасибо за ответы!
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир...

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Отрисовать в 3 бмп дату сначало 1, потом 2... или 2, потом 1...
Отрисовывается методом draw

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

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

т.е. если у меня

Код:
color1 = 0xff0000;
color2 = 0xffff00;
то результатом будет


Код:
color3 = color2; //т.к. color2 > color1
Нужен какой то другой способ, более быстрый.
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир...

Старый 06.06.2008, 16:23
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 4  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
грузим рисунки
http://dnadillo.dn.ua/images/imag/magna_carta_131.JPG
http://dnadillo.dn.ua/images/imag/magna_carta_127.JPG
в бит мапу
ставим бленд моде blendMode="darken";
складываем их
http://dnadillo.dn.ua/fla/in-2-1.swf
http://dnadillo.dn.ua/fla/in-2-1.zip

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

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

Старый 07.06.2008, 12:02
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от DEAFFF Посмотреть сообщение
blendMode он сравнивает по каналам... а мне нужно что бы сразу по всему числу цвета...
А смысл этой затеи можно узнать? Ведь зеленый цвет всегда больше синего, а красный больше зеленого и результирующий битмап будет более красным, меньше зеленым и еще меньше синим.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Feb 2004
Адрес: Россия, В. Новгород
Сообщений: 255
Отправить сообщение для DEAFFF с помощью ICQ
Цитата:
Сообщение от iNils Посмотреть сообщение
А смысл этой затеи можно узнать? Ведь зеленый цвет всегда больше синего, а красный больше зеленого и результирующий битмап будет более красным, меньше зеленым и еще меньше синим.
Мне нужно это, не с точки зрения изображений и цветов или фильтров или смешиваний.

Суть такая есть два массива числовых данных, надо получить третий массив по указанному выше условию...
Просто эти данные рисуются в битмап дате... так быстрее их генерить!
А вот сравнивать не очень быстро...
__________________
зная будущее, хотя бы, на 10 минут вперед, можно покорить весь мир...

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

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
Если по точкам медленно, то можно по байтовому массиву. Надо уточнить, какое время обработки вас устроит.
Здесь в тесте, для двух картинок размером 2400x2400 время генерации результирующей: 2814 мс.
Код:
var bmp1:BitmapData = new TestBmp1(0,0); //2400x2400
var bmp2:BitmapData = new TestBmp2(0,0); //2400x2400

var tm:int = getTimer();

var b1:ByteArray = bmp1.getPixels(bmp1.rect);
var b2:ByteArray = bmp2.getPixels(bmp2.rect);
var b3:ByteArray = new ByteArray();

b1.position=0;
b2.position=0;
var len:int = b1.bytesAvailable / 4;
while (len--) {
	var c1:uint = b1.readUnsignedInt();
	var c2:uint = b2.readUnsignedInt();
	b3.writeUnsignedInt((c1 & 0xFFFFFF) > (c2 & 0xFFFFFF) ? c1 : c2); // не учитывая alpha
}
var bmp3:BitmapData = new BitmapData(bmp1.width, bmp1.height);
b3.position = 0;
bmp3.setPixels(bmp3.rect, b3);

trace("time:", getTimer()-tm); // time: 2814

addChild(new Bitmap(bmp3));
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

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

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

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

Регистрация: Feb 2008
Сообщений: 111
Хм у меня получилось получить 3й битмап где то в 4-5 раз быстрее чем через byteArray.

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

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

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


 


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


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