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

Reply via email to