Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как правильно сложить BitmapData нужным способом? (http://www.flasher.ru/forum/showthread.php?t=112738)

DEAFFF 06.06.2008 15:18

Как правильно сложить 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 или фильтр... или бог знает что :)

Заранее спасибо за ответы!

Psycho Tiger 06.06.2008 15:53

Отрисовать в 3 бмп дату сначало 1, потом 2... или 2, потом 1...
Отрисовывается методом draw

DEAFFF 06.06.2008 15:59

методом draw будет складываться по альфаканалу, а мне нужно по цвету

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

Код:

color1 = 0xff0000;
color2 = 0xffff00;

то результатом будет


Код:

color3 = color2; //т.к. color2 > color1
Нужен какой то другой способ, более быстрый.

Alex Lexcuk 06.06.2008 16:23

грузим рисунки
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

DEAFFF 06.06.2008 20:56

не помогает...
blendMode он сравнивает по каналам... а мне нужно что бы сразу по всему числу цвета...

MerlinTwi 07.06.2008 11:05

Если по точкам медленно, то можно по байтовому массиву. Надо уточнить, какое время обработки вас устроит.
Здесь в тесте, для двух картинок размером 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));


iNils 07.06.2008 12:02

Цитата:

Сообщение от DEAFFF (Сообщение 744152)
blendMode он сравнивает по каналам... а мне нужно что бы сразу по всему числу цвета...

А смысл этой затеи можно узнать? Ведь зеленый цвет всегда больше синего, а красный больше зеленого и результирующий битмап будет более красным, меньше зеленым и еще меньше синим.

DEAFFF 07.06.2008 15:13

Цитата:

Сообщение от MerlinTwi (Сообщение 744255)
Если по точкам медленно, то можно по байтовому массиву. Надо уточнить, какое время обработки вас устроит.
Здесь в тесте, для двух картинок размером 2400x2400 время генерации результирующей: 2814 мс.

Да интересный вариант! Но все равно тут перебор а он кушает очень много времени!

DEAFFF 07.06.2008 15:24

Цитата:

Сообщение от iNils (Сообщение 744266)
А смысл этой затеи можно узнать? Ведь зеленый цвет всегда больше синего, а красный больше зеленого и результирующий битмап будет более красным, меньше зеленым и еще меньше синим.

Мне нужно это, не с точки зрения изображений и цветов или фильтров или смешиваний.

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

mikleb 09.06.2008 13:58

Хм у меня получилось получить 3й битмап где то в 4-5 раз быстрее чем через byteArray.


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

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