2013-07-15 2 views
0

Я BitmapData объект преобразован в ByteArray,:Как получить размер BitmapData превращается в ByteArray,

var bytes:ByteArray = bitmapDataA.getPixels(bitmapDataA.rect); 

и я сохранить его как .jpg файл для последующего использования:

writeStream.writeBytes(bytes, 0, bytes.bytesAvailable); 

Теперь, когда я хочу для извлечения данных:

var file:File = File.documentsDirectory.resolvePath("data/"+photoNameVec[loadCounter]);   
var fileStream:FileStream = new FileStream(); 
fileStream.open(file, FileMode.READ); 
var fileContent:ByteArray = new ByteArray; 
fileStream.readBytes(fileContent); 
fileStream.close();   
var bmpData:BitmapData = new BitmapData(XXX, YYY); 
bmpData.setPixels(bmpData.rect, fileContent); 
addChild(new Bitmap(bmpData)); 

Но мне нужно, чтобы получить точную ХХХ и правильно показывать графику. Как я могу это сделать?

EDIT:

Как не было никакого способа определить BitmapData ширину и высоту, основанную на ByteArray, я решил преобразовать все фотографии, которые я взять на 1024px х 768px:

var bitmapDataA:BitmapData = new BitmapData(mpLoaderInfo.width, mpLoaderInfo.height); 
var matrix:Matrix = new Matrix(); 
matrix.scale(1024/mpLoaderInfo.width, 768/mpLoaderInfo.height); 
var bitmapDataB:BitmapData = new BitmapData(1024,768); 
bitmapDataB.draw(mpLoaderInfo.content, matrix, null, null, new Rectangle(0,0,1024,768), true); 

Все еще ждут советы при получении Width x Height from bytearray, созданного getPixels метод bitmapdata.

ответ

0

Я думаю, что это самое удобное решение:) Просто расширьте bytearray дополнительными значениями, из которых я соберу ширину и высоту.

http://www.ghostwire.com/blog/archives/as3-serializing-bitmaps-storing-bitmapdata-as-raw-binarybytearray/

Ps .: Создание и чтение несжатых файлов является способ быстрее, чем сделать PNG/JPG

1

Вы можете использовать Loader класс, чтобы загрузить изображение, то вы можете получить доступ к его width/height и BitmapData

var file:File = File.documentsDirectory.resolvePath("data/"+photoNameVec[loadCounter]); 
var myImage:BitmapData; 

var loader:Loader = new Loader(); 
var urlReq:URLRequest = new URLRequest(file.url); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded); 
loader.load(urlReq); 

function loaded(e:Event):void 
{ 
    var bmp:Bitmap = e.target.content as Bitmap; 
    myImage = bmp.bitmapData; 
    trace(myImage.width, myImage.height); 
} 

А вот с loadBytes

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.INIT, loaded); 
loader.loadBytes(yourByteArray); 

function loaded(e:Event):void 
{ 
    var bmp:Bitmap = e.target.content as Bitmap; 
    myImage = bmp.bitmapData; 
    trace(myImage.width, myImage.height); 
} 
+0

Мой файл не закодирован как JPG, он содержит только сырые BitmapData ByteArray. Так загруженный файл не предоставляет растровое изображение в его содержании :( – SzRaPnEL

+0

Mayby есть способ преобразовать bytearray в bytearray нужного размера? Я слышал о преобразованиях bytearrays где-то, но не знаю, как его использовать – SzRaPnEL

+0

Вы можете использовать этот http: //help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Loader.html#loadBytes(), чтобы загрузить массив байтов в 'Loader' –

0

байт массив, созданный getPixels не содержит никакой информации о высоте или ширине растрового изображения, то просто «беззнаковое целое число (32-битное значение не умноженного пикселя) для каждого пикселя».

Таким образом, вам нужно либо записать его как формат изображения (PNG/JPG), который потребует кодирования (отсюда время), либо просто добавить ширину и высоту в массив байтов перед записью в файл.

Например, в вашем потоке писатель:

writeStream.writeInt(bitmapDataA.width); 
writeStream.writeInt(bitmapDataA.height); 
writeStream.writeBytes(bytes, 0, bytes.bytesAvailable); 

Тогда при загрузке:

var file:File = File.documentsDirectory.resolvePath("data/"+photoNameVec[loadCounter]);   
var fileStream:FileStream = new FileStream(); 
fileStream.open(file, FileMode.READ); 

var w:int = fileStream.readInt(); 
var h:int = fileStream.readInt(); 

var fileContent:ByteArray = new ByteArray; 
fileStream.readBytes(fileContent); 
fileStream.close();   

var bmpData:BitmapData = new BitmapData(w , h); 

bmpData.setPixels(bmpData.rect, fileContent); 
addChild(new Bitmap(bmpData));