PDA

Просмотр полной версии : Обращение к свойствам Bitmap


Torero
21.02.2008, 06:03
Доброго времени суток.
Возникла проблемка небольшая: Подскажите пожалуйста, почему я не могу добраться до свойств объекта Bitmap(), обращаясь к нему через getChildAt?

var bm:Bitmap=new Bitmap(new BitmapData(100,100,false,0x00FF00));
bm.x=100;
addChild(bm);
bm.smoothing=true;
//getChildAt(0).smoothing=true; //вываливается в ошибку


P.S.Сразу приношу извинения за код в кадре - вопрос, похоже, примитивный.
P.P.S. Модераторам: переименуйте пожалуйста топик в "Обращение к свойствам Bitmap()" - я плохо название сформулировал.

MerlinTwi
21.02.2008, 10:24
(getChildAt(0) as Bitmap).smoothing=true;

Pecher
21.02.2008, 10:26
Компилер не знает, что childAt(0) - это Bitmap.
Bitmap(getChildAt(0)).smoothing = true;

etc
21.02.2008, 10:43
Pecher, для кастинга есть оператор as.

Torero
21.02.2008, 16:01
Большое спасибо. С вашего позволения еще 1 вопрос на тему битмапов:

A BitmapData object can be drawn to the screen by a Bitmap object in one of two ways: by using the vector renderer as a fill-bitmap shape, or by using a faster pixel-copying routine. The pixel-copying routine is substantially faster than the vector renderer, but the Bitmap object must meet certain conditions to use it:

-No stretching, rotation, or skewing can be applied to the Bitmap object.
-..
-..

- это кусок из хелпа. Подскажите пожалуйста как его понимать в следующей ситуации:

1.есть объект BitmapData() в котором отрисован прямоугольник
2.есть 10-100 объектов Bitmap(), ссылающихся на вышеупомянутый BitmapData()
3.У некоторых из объектов Bitmap() изменены .scaleX и .rotation, к некоторым применен colorTransform - для них что, рендерер создает свои BitmapData()??
P.S.В реале, в BitmapData отрисован не прямоугольник, а нечто, состоящее из 20-25 шейпов, поэтому и использую BitmapData+много Bitmap, а не отрисовываю вектор.

silin
21.02.2008, 16:30
непонятно что смущает : все битмапы несут ссылку на один и тот же битмапДата, но отрисовывают его уже как кому надо..

Torero
21.02.2008, 17:11
Смущает непонимание того каким образом Bitmap(), основывающийся на BitmapData() отрисовывается посредством !!vector!! renderer-а. Это тупизм какой-то. Как такое вообще возможно? Ведь, по-идее, BitmapData() и vector-renderer вещи несовместимые.

etc
21.02.2008, 17:15
Ведь, по-идее, BitmapData() и vector-renderer вещи несовместимые.
Bitmap не является наследником BitmapData.

LinuxVideo
21.02.2008, 17:30
Похожий вопрос: а как форсировать faster pixel-copying routine? Дабы всегда был только он?

silin
21.02.2008, 17:38
имхо об этом и речь в приведенной тобой цитате: если битмап должен показать картинку без трансформаций, то можно по быстрому тупо скопировать все пиксели в экран, а если картинка повернута/погнута/пофильтрена, то по простому уже не проходит - нужны более ресурсоемкие алгоритмы..
не знаю точно, но думаю что vector renderer здесь условное понятие, во всяком случае не вижу смысла заморачиваться на этом

LinuxVideo
21.02.2008, 20:11
> не вижу смысла заморачиваться на этом

Когда время рендеринга около 2200ms, то смысл есть. Тут еще 3D добавил, вообще плохо стало...


> а если картинка повернута/погнута/пофильтрена, то по простому уже не проходит - нужны более ресурсоемкие алгоритмы..

Оно у меня работает быстрее, чем copyPixels из битмапа в битмап... Я уже писал про это. Сам в шоке.

silin
21.02.2008, 20:39
ээ..я, собственно, Torero отвечал по поводу что за vector renderer при отрисовке растра..
как принудить не знаю, подозреваю, что плеер это сам решает когда что можно.., да и как принудишь, если это в принципе нереально для искаженной картинки..
copyPixels (метод BitmapData) здесь вовсе не при чем: речь же о внутренних методах, которыми плеер (Bitmap в этом контексте) выводит картинку

MerlinTwi
22.02.2008, 11:14
vector renderer подразумевается, что создается Shape, который заливается (beginBitmapFill) картинкой с применением матриц искажения.
ИМХО, т.к. что действительно делает рендер знают лишь в адобе.

Недавно натолкнулся на интересную фичу: если создать мувик, в него положить картинку из библиотеки и сделать трейс

trace(this.getChildAt(0));

то получаем:
[object Shape]
и только если эту картинку превратить в класс (Linkage: export for ActionScript), то будет уже
[object Bitmap]

etc
22.02.2008, 13:18
Ну это как бы не фича, шейпы с заливкой едва ли не с пятой версии идут.

Torero
22.02.2008, 16:33
Спасибо за ликбез.))

Ariel
17.04.2011, 03:54
Вопрос, на самом деле, очень важный. Тут есть над чем поразмыслить...
Скажем, КАК определить, КАКИМ рендерером в данный момент выводится Битмапа? Просто соблюдать условия, перечисленные в хелпе, недостаточно для уверенного девелопмента. Я хочу знать НАВЕРНЯКА, КАК оно сейчас рисуется. Если, например, используются Float-координаты для передвижения картинки, а не Int, то, в соответствии с хелпом, должен включаться алгоритм векторного рендерера... Как узнать наверняка? Не нужны нам ситуации, когда две ОДИНАКОВЫЕ Битмапы, построенные на ОДИНАКОВЫХ БитмапДатах будут рисоваться разными рендерерами только потому, что одну из них повернули на 1 градус....
Тут конечно очень ценен опыт тов. Etc-a, который, оптимизируя Destiny, наверняка кучу собак съел с этими рендерерами и копипикселями.

alatar
17.04.2011, 11:51
Ariel, даже если вы узнаете наверняка, этот "верняк" будет работать для конкретной версии плеера. Рендерер сейчас активно меняется. Хотите контролируемости — используйте bitmap blitting. В определенных ситуациях и при правильном подходе это дает весьма ощутимый прирост в производительности.

Ariel
17.04.2011, 20:40
блиттинг годится тильки если рендерить все время надо б0льшую часть стэйджа. Если объектов не море, то он откровенно вреден, так как всегда перерисовывает всю сцену. А если у нас полнобраузерное\полноэкранное приложение? Хотя, Вы говорите, при правильном подходе ...

Пускай "верняк" работает в конкретной версии, но я хочу это реально видеть. А то гадать, откуда тормоза взялись ИМХО не правильно.

alatar
18.04.2011, 00:18
блиттинг годится тильки если рендерить все время надо б0льшую часть стэйджа.
Почему вы так решили (http://coolisee.com/2010/08/14/ochistka-blitirovannogo-xolsta-putem-udaleniya-tolko-izmenivshixsya-chastej-ispolzovanie-karty-povrezhdenij/)?

Ariel
18.04.2011, 02:21
Отличная ссылка, спасибо! Автор, как и я, юзал полностейджевый блиттинг. Пока не повстречал старую гвардию! Круто, всегда есть куда продвигаться! Опять-таки, есть над чем поразмыслить.
Он даже перевел статью от 8битРокета про Арканоид!
Гражданину Алатару - гранд мерси!

fish_r
18.04.2011, 02:46
alatar твоя страничка что ль?

alatar
18.04.2011, 04:27
Нет, не моя.