forked from: ASEファイルを読んでみるテスト

by rodrigocardozo forked from ASEファイルを読んでみるテスト (diff: 1)
♥0 | Line 91 | Modified 2012-02-11 07:45:57 | MIT License
play

ActionScript3 source code

/**
 * Copyright rodrigocardozo ( http://wonderfl.net/user/rodrigocardozo )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/xQ4Q
 */

<?xml version="1.0" encoding="utf-8"?>
<!-- forked from zahir's ASEファイルを読んでみるテスト -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="465" height="465">
<!--
次は書き出しできるようにしてみよう。


ちなみにASEファイルはKulerからDLできるCS4で使える色見本(?)ファイルです
-->
    <mx:Script>
        <![CDATA[
            private const type:Array = ["Global", "Spot", "Normal"];
            private const _filter:Array = [ new FileFilter("load ASE file","*.ase") ];
            private var f:FileReference;
            
            private function loadASE():void{
                f = new FileReference();
                f.addEventListener( Event.SELECT, onLoadSelect );
                f.browse( _filter );
            }
            private function onLoadSelect(e:Event):void{
                f.removeEventListener( Event.SELECT, onLoadSelect );
                f.addEventListener( Event.COMPLETE, onComplete );
                f.load();
            }
            private function onComplete(e:Event):void{
                var str:String = "";
                var ba:ByteArray = f.data;
                ba.endian = "bigEndian";
                str = "";
                str += "binary length :: " + ba.length + "\n\n";
                
                str += "Signature :: " + ba.readUTFBytes(4) + "\n";
                str += "Version :: " + (ba.readInt() >> 16) + "\n";
                str += "Num Block :: " + ba.readInt() + "\n\n";
                
                while( ba.bytesAvailable ){
                    var group:int = ba.readUnsignedShort();
                    var len:int = ba.readInt();
                    var b:ByteArray = new ByteArray();
                    ba.readBytes( b, 0, len);
                    b.endian = Endian.BIG_ENDIAN;
                    len = b.readUnsignedShort();
                    switch(group){
                        case 0xC001:
                            str += "GroupStart\n";
                            str += "File Name :: " + readString(b,len) + "\n";
                            break;
                        case 0xC002:
                            str += "GroupEnd\n";
                            break;
                        case 0x0001:
                            str += "\t"+"Color Name :: " + readString(b,len) + "\n";
                            var model:String = b.readUTFBytes(4);
                            str += "\t"+"Color Model :: " + model + "\n";
                            switch(model){
                                case "RGB ":
                                    str += "\t\tR :: " + Math.round( b.readFloat() * 255 ) + "\n";
                                    str += "\t\tG :: " + Math.round( b.readFloat() * 255 ) + "\n";
                                    str += "\t\tB :: " + Math.round( b.readFloat() * 255 ) + "\n";
                                    break;
                                case "CMYK":
                                    str += "\t\tC :: " + Math.round( b.readFloat() * 100 ) + "\n";
                                    str += "\t\tM :: " + Math.round( b.readFloat() * 100 ) + "\n";
                                    str += "\t\tY :: " + Math.round( b.readFloat() * 100 ) + "\n";
                                    str += "\t\tK :: " + Math.round( b.readFloat() * 100 ) + "\n";
                                    break;
                                case "LAB ":
                                    str += "\t\tL :: " + Math.round( b.readFloat() * 255 ) + "\n";
                                    str += "\t\ta :: " + Math.round( b.readFloat() * 255 ) + "\n";
                                    str += "\t\tb :: " + Math.round( b.readFloat() * 255 ) + "\n";
                                    break;
                                case "Gray":
                                    str += "\t\tG :: " + Math.round( b.readFloat() * 255 ) + "\n";
                                    break;
                            }
                            str += "\tColor Type :: " + type[b.readUnsignedShort()] + "\n";
                            break;
                    }
                    str += "\n";
                }
                
                //
                t.text = str;
            }
            
            //こんなことしなくても読めるようにならないかな…
            private function readString(b:ByteArray,len:int):String{
                var str:String = "";
                for(var i:int =0; i<len; i++){
                    b.position++;
                    str += b.readUTFBytes(1);
                }
                return str;
            }
            
        ]]>
    </mx:Script>
    <mx:TextArea id="t" left="8" right="8" top="8" bottom="38"/>
    <mx:Button label="load .ase" buttonDown="loadASE()" bottom="8" left="8"/>
</mx:Application>