Flash / ActionScript3.0」カテゴリーアーカイブ

Base64形式のJPEGファイルを表示する

Base64形式でエンコードしたJPEGファイルの文字列をas3でデコードする方法

JPEGのデコードは、AS3 JPEG Decoder – ByteArray.orgを利用

package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.utils.ByteArray;
    
    import mx.utils.Base64Decoder;
    
    import org.bytearray.decoder.JPEGDecoder;
    
    [SWF(width="1024", height="768", frameRate="60", backgroundColor="#f5f2f0")]
    public class TestBase64 extends Sprite
    {
        private static const base64Data:String = "/9j/4AAQSkZJRgABAgEASABIAAD/4R7sRXhpZgAATU0AKgAAAAgADgEAAAMAAAABAgAAAAEBAAMAAAABAgAAAAECAAMAAAADAAAAtgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEVAAMAAAABAAMAAAEaAAUAAAABAAAAvAEbAAUAAAABAAAAxAEcAAMAAAABAAEAAAEoAAMAAAABAAIAAAExAAIAAAAeAAAAzAEyAAIAAAAUAAAA6odpAAQAAAABAAABAAAAASwACAAIAAgACvyAAAAnEAAK"; //本当はもっと長く続く
        
        
        public function TestBase64()
        {
            var decoder:Base64Decoder = new Base64Decoder();
            decoder.decode( base64Data );
            var ba:ByteArray = decoder.toByteArray();
                
            
            var myDecoder:JPEGDecoder = new JPEGDecoder();
            myDecoder.parse(ba);
            var width:uint = myDecoder.width;
            var height:uint = myDecoder.height;
            var colorComponents:uint = myDecoder.colorComponents;
            var numComponents:uint = myDecoder.numComponents;
            var pixels:Vector.<uint> = myDecoder.pixels;
            
            var bitmapData:BitmapData = new BitmapData ( width, height, false );
            bitmapData.setVector ( bitmapData.rect, pixels );
            var bmp:Bitmap = new Bitmap( bitmapData );
            addChild( bmp );               
        }
    }
}

面の向きを求める

メモメモ。

FN1008001 – 3次元空間における面の向きを調べる – Flash : テクニカルノート

3次元座標空間で面を扱うとき、その向きを知りたいことがあります。面の向きは、面に対する垂線のベクトルで定められます。これを「法線ベクトル」と呼びます。なお、本稿では面をDisplayObjectインスタンス、または3頂点の3次元座標で表される3角形で考えることにします。

文字列からクラス名を参照する方法

メモメモ

F-site | [AS3] クラスを文字列で参照したい

文字列で指定されたクラス名からクラスの参照を得るには、flash.utils.getDefinitionByName()関数を用います。引数の文字列にクラス名を指定すれば、クラスの参照が返ります。クラスの参照を格納する変数には、Classでデータ型を指定します。

二つの線分の交差する角度を求める

point1が交点。

var point0:Point, point1:Point, point2:Point;
point0 = new Point( 50, 100 );
point1 = new Point( 200, 200 );
point2 = new Point( 100, 300 );

point0.offset( -point1.x, -point1.y );
point2.offset( -point1.x, -point1.y );

var vector0:Vector3D, vector1:Vector3D;
vector0 = new Vector3D( point0.x, point0.y, 0 );
vector1 = new Vector3D( point2.x, point2.y, 0 );
var angle:Number = Vector3D.angleBetween( vector0, vector1 ); //このときはまだラジアン
var d:Number = angle * 180/Math.PI;

もっと早い書き方があるような気がするが、なんとか算出できた。

SVGをas3で読み込む方法

as3でSVGを読み込むには、Frocessingライブラリが使える。

package
{
    import flash.display.Sprite;
    
    import frocessing.shape.FShapeSVG;
    
    public class TestSVG extends Sprite
    {
        [Embed(source="./assets/foo.svg", mimeType="application/octet-stream")]
        private var Svg:Class;

        public function TestSVG()
        {
            super();
            
            var svg:XML = XML( new Svg() );
            //shapeデータの生成
            var shapedata:FShapeSVG = new FShapeSVG(svg);
            //Spriteに変換
            var sprite:Sprite = shapedata.toSprite();
            //表示
            addChild( sprite );
        }
    }
}