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