home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / com / adobe / images / PNGEncoder.as < prev   
Encoding:
Text File  |  2010-06-23  |  3.6 KB  |  122 lines

  1. package com.adobe.images
  2. {
  3.    import flash.display.BitmapData;
  4.    import flash.geom.*;
  5.    import flash.utils.ByteArray;
  6.    
  7.    public class PNGEncoder
  8.    {
  9.       private static var crcTable:Array;
  10.       
  11.       private static var crcTableComputed:Boolean = false;
  12.       
  13.       public function PNGEncoder()
  14.       {
  15.          super();
  16.       }
  17.       
  18.       private static function writeChunk(param1:ByteArray, param2:uint, param3:ByteArray) : void
  19.       {
  20.          var _loc8_:uint = 0;
  21.          var _loc9_:uint = 0;
  22.          var _loc10_:uint = 0;
  23.          if(!crcTableComputed)
  24.          {
  25.             crcTableComputed = true;
  26.             crcTable = [];
  27.             _loc9_ = 0;
  28.             while(_loc9_ < 256)
  29.             {
  30.                _loc8_ = _loc9_;
  31.                _loc10_ = 0;
  32.                while(_loc10_ < 8)
  33.                {
  34.                   if(_loc8_ & 1)
  35.                   {
  36.                      _loc8_ = uint(uint(3988292384) ^ uint(_loc8_ >>> 1));
  37.                   }
  38.                   else
  39.                   {
  40.                      _loc8_ = uint(_loc8_ >>> 1);
  41.                   }
  42.                   _loc10_++;
  43.                }
  44.                crcTable[_loc9_] = _loc8_;
  45.                _loc9_++;
  46.             }
  47.          }
  48.          var _loc4_:uint = 0;
  49.          if(param3 != null)
  50.          {
  51.             _loc4_ = param3.length;
  52.          }
  53.          param1.writeUnsignedInt(_loc4_);
  54.          var _loc5_:uint = param1.position;
  55.          param1.writeUnsignedInt(param2);
  56.          if(param3 != null)
  57.          {
  58.             param1.writeBytes(param3);
  59.          }
  60.          var _loc6_:uint = param1.position;
  61.          param1.position = _loc5_;
  62.          _loc8_ = 4294967295;
  63.          var _loc7_:int = 0;
  64.          while(_loc7_ < _loc6_ - _loc5_)
  65.          {
  66.             _loc8_ = uint(crcTable[(_loc8_ ^ param1.readUnsignedByte()) & uint(255)] ^ uint(_loc8_ >>> 8));
  67.             _loc7_++;
  68.          }
  69.          _loc8_ = uint(_loc8_ ^ uint(4294967295));
  70.          param1.position = _loc6_;
  71.          param1.writeUnsignedInt(_loc8_);
  72.       }
  73.       
  74.       public static function encode(param1:BitmapData) : ByteArray
  75.       {
  76.          var _loc6_:uint = 0;
  77.          var _loc7_:int = 0;
  78.          var _loc2_:ByteArray = new ByteArray();
  79.          _loc2_.writeUnsignedInt(2303741511);
  80.          _loc2_.writeUnsignedInt(218765834);
  81.          var _loc3_:ByteArray = new ByteArray();
  82.          _loc3_.writeInt(param1.width);
  83.          _loc3_.writeInt(param1.height);
  84.          _loc3_.writeUnsignedInt(134610944);
  85.          _loc3_.writeByte(0);
  86.          writeChunk(_loc2_,1229472850,_loc3_);
  87.          var _loc4_:ByteArray = new ByteArray();
  88.          var _loc5_:int = 0;
  89.          while(_loc5_ < param1.height)
  90.          {
  91.             _loc4_.writeByte(0);
  92.             if(!param1.transparent)
  93.             {
  94.                _loc7_ = 0;
  95.                while(_loc7_ < param1.width)
  96.                {
  97.                   _loc6_ = param1.getPixel(_loc7_,_loc5_);
  98.                   _loc4_.writeUnsignedInt(uint((_loc6_ & 0xFFFFFF) << 8 | 0xFF));
  99.                   _loc7_++;
  100.                }
  101.             }
  102.             else
  103.             {
  104.                _loc7_ = 0;
  105.                while(_loc7_ < param1.width)
  106.                {
  107.                   _loc6_ = param1.getPixel32(_loc7_,_loc5_);
  108.                   _loc4_.writeUnsignedInt(uint((_loc6_ & 0xFFFFFF) << 8 | _loc6_ >>> 24));
  109.                   _loc7_++;
  110.                }
  111.             }
  112.             _loc5_++;
  113.          }
  114.          _loc4_.compress();
  115.          writeChunk(_loc2_,1229209940,_loc4_);
  116.          writeChunk(_loc2_,1229278788,null);
  117.          return _loc2_;
  118.       }
  119.    }
  120. }
  121.  
  122.