ASEファイルを読んでみるテスト
♥0 |
Line 90 |
Modified 2010-03-21 15:56:52 |
MIT License
archived:2017-03-10 17:08:06
ActionScript3 source code
/**
* Copyright zahir ( http://wonderfl.net/user/zahir )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/vM22
*/
<?xml version="1.0" encoding="utf-8"?>
<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>