AS3: ByteArray и BitmapData

Я делаю простой тест. Я хочу записать BitmapData в ByteArray. Я пытаюсь сделать это с помощью writeObject() и readObject(). У объекта чтения возникают проблемы с пониманием BitmapData.

var byteArray : ByteArray = new ByteArray();
var _cache : BitmapData = new BitmapData( 640, 480, true, 0x000000 );
var _blank : BitmapData = new BitmapData( 640, 480, true, 0x000000 );

byteArray.writeObject( _blank );
byteArray.position = 0;
_cache = byteArray.readObject() as BitmapData;
trace( _cache ); // Traces null

Может ли кто-нибудь прояснить это для меня? Я не могу понять, что происходит с readObject();

Я знаю, что могу сделать это с помощью getPixels() и setPixels(), но я хотел бы рассматривать объект здесь как объект.


person grey    schedule 22.07.2009    source источник


Ответы (1)


вы должны использовать BitmapData::getPixels и BitmapData::setPixels ... запись экземпляров класса в ByteArray как таковая никогда полностью не работает, как ожидалось ... попробуйте со спрайтами ... :) ... это в основном из-за того, что реализация по умолчанию как-то только записывает свойство объекта в IDataOutput (ByteArray или Socket) ... пиксели не являются свойством BitmapData в этом смысле ... BitmapData - это просто оболочка ActionScript, которая предоставляет интерфейс для некоторой внутренней структуры данных флэш-плеера. ..

вам следует написать адаптер для BitmapData, реализующий IExternalizable, чтобы вы могли контролировать происходящее... по сути, вам нужно будет только прочитать / напишите размеры и фактическую полезную нагрузку в пикселях... возможно, прозрачный флаг... не забудьте использовать registerClassAlias ...

приветствие

back2dos

person back2dos    schedule 23.07.2009
comment
Очень интересно. Шикарный ответ, как обычно. Спасибо! Я поэкспериментирую с этим. - person grey; 24.07.2009