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

by zahir
♥0 | Line 90 | Modified 2010-03-21 15:56:52 | MIT License
play

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>

Forked