Thanks for your help - uploaded the finished code to the google SVN - so it's free for all...
https://code.google.com/p/kurstcode/source/browse/trunk/libs/com/kurst/air/utils/ImageUtils.as Regards Karim On 24 May 2010, at 20:44, Karim Beyrouti wrote: > Perfect - thank you for the extended and most useful the answer - had started > thinking along these lines but it's good to know there was no other way ( > apart for the loader ) - as i just need width and height - think i am going > to extract that from the ByteArray... > > thanks again... > > > - k > > > On 24 May 2010, at 20:09, Juan Pablo Califano wrote: > >> If you want to convert it back to pixels, I'd say go with the Loader >> approach. >> >> Other than that, you'd have to write a JPEG decoder (seems like a waste of >> time, considering you can already use a Loader, which would also be faster, >> probably). >> >> Now, if you are only interested in getting the width and height, that data >> is in the SOFO block (SOFO stands for start of frame 0). >> >> SOFO is marked by this sequence of bytes: >> >> 0xFF 0xC0 >> >> So, basically, you can loop through your bytearray until you find this >> sequence. >> >> Then offset your current position as necessary and read the height and >> width. >> >> If you take a look at the JPEG encoder from as3CoreLib, you can see you have >> to skip 5 bytes from the beggining of the SOFO marker to get the height (2 >> bytes) and the width (2 bytes). >> >> http://code.google.com/p/as3corelib/source/browse/trunk/src/com/adobe/images/JPGEncoder.as >> >> Now, I haven't read the JPEG spec, so I'm not sure if this is a fixed >> offset. I'm assuming it is, but you'd better check it if you want to use >> this code. I've tried it with a couple of JPEG's and it worked fine, >> though. >> >> Also, you might want to validate if what you've got is a JPEG (check the >> first 2 bytes for 0xff, 0xd8); you might also want to check that you're not >> reading out of the buffer bounds. >> >> >> function readJPEGSize(data:ByteArray):void { >> var len:int = 0; >> var i:int = 0; >> var offset:int = 0; >> while(data.bytesAvailable > 1) { >> // look for 0xffc0 >> if(data[i] == 0xFF && data[i + 1] == 0xC0) { >> offset = i; >> break; >> } >> i++; >> } >> >> /* >> writeSOF0(image.width,image.height); >> writeWord(0xFFC0); // marker >> writeWord(17); // length, truecolor YUV JPG >> writeByte(8); // precision >> writeWord(height); >> writeWord(width); >> Skip 5 bytes: >> 2 SOFO marker >> 2 length >> 1 precision >> */ >> var h:int = 0; >> var w:int = 0; >> if(offset > 0) { >> offset += 5; >> data.position = offset; >> h = data.readUnsignedShort(); >> w = data.readUnsignedShort(); >> trace(w,h); >> } >> } >> >> Cheers >> Juan Pablo Califano >> >> >> 2010/5/24 Karim Beyrouti <ka...@kurst.co.uk> >> >>> Hi All >>> >>> do any of you how to convert a ByteArray (of a JPG) back into a BitmapData >>> object? >>> >>> Actually - i just need to get the dimensions of the bitmap before trashing >>> it. I know you can do 'myloader.loadBytes( byteArray )' - but i am avoiding >>> that for now - as i just need to get the size of the image. >>> >>> Any pointers? >>> >>> >>> mucho thanks >>> >>> >>> - karim >>> _______________________________________________ >>> Flashcoders mailing list >>> Flashcoders@chattyfig.figleaf.com >>> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders >>> >> _______________________________________________ >> Flashcoders mailing list >> Flashcoders@chattyfig.figleaf.com >> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders > > > _______________________________________________ > Flashcoders mailing list > Flashcoders@chattyfig.figleaf.com > http://chattyfig.figleaf.com/mailman/listinfo/flashcoders _______________________________________________ Flashcoders mailing list Flashcoders@chattyfig.figleaf.com http://chattyfig.figleaf.com/mailman/listinfo/flashcoders