it's a pleasure - missed a file in my upload to svn - now corrected and updated.
I have also included a sample/test Flash Builder / Air 1.5 application that resizes Jpegs above a certain size - and copies the result to a 'temp' folder in the application directory. work in progress, but functional. I will be using that as an image importer in for an application i am working on... Spent quite a while making sure memory is cleared after each image resize/copy batch operation ( i do wish Flash Player had better memory management / Control over the GC). Also tried the Alchemy complied JPG encoders out there, which were much faster, but I think they created a memory leak - although that's probably me not finding the clean-up functions.Ended up using the 'inspirit' async Jpg encoder here (thanks - http://blog.inspirit.ru/ - love his work ). hmm... that's quite a rant for me... enjoy... - karim On 10 Jun 2010, at 23:01, Juan Pablo Califano wrote: > No worries! > > And thanks for sharing. > > Cheers > Juan Pablo Califano > > 2010/6/10 Karim Beyrouti <ka...@kurst.co.uk> > >> 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 >> > _______________________________________________ > 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