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

Reply via email to