▼ActionScript 2.0メモ▼
ビットマップの使用


ビットマップに図形やイメージや文字を描画するFlashを作成する。[Flash7・Flash Lite2では使用不可]



素材の準備
画像1つを準備する。swfmillを使ってSWFに埋め込む

sample.png


ソースコード

BitmapEx.as
import flash.display.*;
import flash.geom.*;
import flash.display.*;

//ビットマップを使用する
class BitmapEx extends MovieClip {
    private var g:JGraphics;//グラフィックス

    //コンストラクタ
    public function BitmapEx() {
        //リソースの追加
        var image:MovieClip=addResource(this,"sample");

        //グラフィックスの生成
        g=new JGraphics(this,240,240);
        
        //背景の描画
        g.setColor(g.getColorOfName(JGraphics.WHITE));
        g.fillRect(0,0,240,240);

        //ラインの描画
        g.setColor(g.getColorOfRGB(255,100,100));
        g.drawLine(180,20,220,20);

        //矩形の描画
        g.setColor(g.getColorOfRGB(100,255,100));
        g.drawRect(180,40,40,40);

        //塗り潰し矩形の描画
        g.setColor(g.getColorOfRGB(100,100,255));
        g.fillRect(180,90,40,40);
                
        //イメージの描画
        g.drawImage(image,0,0);

        //文字列の描画
        g.setColor(g.getColorOfName(JGraphics.RED));
        g.drawString("テキストのテスト!",10,200);
    }

    //リソースの追加
    private function addResource(mc:MovieClip,name:String):MovieClip {
        mc.attachMovie(name,name,mc.getNextHighestDepth());
        return mc[name];
    }
}


JGraphics.as
import flash.display.*;
import flash.geom.*;
    
//Java風グラフィックスラッパー
class JGraphics {
    //色定数
    public static var 
        AQUA:Number   =(  0<<16)+(255<<8)+255,
        BLACK:Number  =(  0<<16)+(  0<<8)+  0,
        BLUE:Number   =(  0<<16)+(  0<<8)+255,
        FUCHSIA:Number=(255<<16)+(  0<<8)+255,
        GRAY:Number   =(128<<16)+(128<<8)+128,
        GREEN:Number  =(  0<<16)+(128<<8)+  0,
        LIME:Number   =(  0<<16)+(255<<8)+  0,
        MAROON:Number =(128<<16)+(  0<<8)+  0,
        NAVY:Number   =(  0<<16)+(  0<<8)+128,
        OLIVE:Number  =(128<<16)+(128<<8)+  0,
        PURPLE:Number =(128<<16)+(  0<<8)+128,
        RED:Number    =(255<<16)+(  0<<8)+  0,
        SILVER:Number =(192<<16)+(192<<8)+192,
        TEAL:Number   =(  0<<16)+(128<<8)+128,
        WHITE:Number  =(255<<16)+(255<<8)+255,
        YELLOW:Number =(255<<16)+(255<<8)+  0;

    //変数
    private var mc:MovieClip;     //ムービークリップ
    private var bd:BitmapData;    //BMPデータ
    private var color:Number;     //色
    private var shape:MovieClip;  //シェイプ
    private var label:TextField;  //ラベル
    private var format:TextFormat;//フォーマット

    //コンストラクタ
    public function JGraphics(parent:MovieClip,w:Number,h:Number) {
        //ムービークリップ
        parent.createEmptyMovieClip("mc",parent.getNextHighestDepth());
        mc=parent["mc"];

        //BMPデータ
        bd=new BitmapData(w,h,false,0xffffff);

        //色
        color=0x000000; 

        //シェイプ
        mc.createEmptyMovieClip("shape",0);
        shape=mc["shape"];

        //ラベル
        mc.createTextField("label",1,0,0,0,0);
        label=mc["label"];
        label.autoSize="left";

        //フォーマット
        format=new TextFormat();
        format.font ="_等幅";
        format.color=0x000000;
        setFontSize(12);

        //追加
        mc.attachBitmap(bd,2);
    }

    //フォントサイズの指定(ピクセル単位)
    public function setFontSize(size:Number):Void {
        var i:Number;
        label.text="■";
        for (i=size+10;i>=1;i--) {
            format.size=i;
            label.setTextFormat(format);
            if (label.textWidth<=size) break;
        }           
    }        

    //文字列幅の取得
    public function stringWidth(text:String):Number {
        label.text=text;
        label.setTextFormat(format);
        return label.textWidth; 
    }

    //文字列高さの取得
    public function stringHeight(text:String):Number {
        label.text=text;
        label.setTextFormat(format);
        return label.textHeight; 
    }
        
    //BMPデータの取得
    public function getBitmapData():BitmapData {
        return bd;
    }

    //色の取得
    public function getColorOfRGB(r:Number,g:Number,b:Number):Number {
        return (r<<16)+(g<<8)+b;
    }
        
    //色の取得
    public function getColorOfName(name:Number):Number {
        return name;
    }        
        
    //色の指定
    public function setColor(color:Number):Void {
        this.color=color;
        format.color=color;
    }
        
    //ラインの描画
    public function drawLine(x0:Number,y0:Number,x1:Number,y1:Number):Void {
        shape.clear();
        shape.lineStyle(0,color);
        shape.moveTo(x0,y0);
        shape.lineTo(x1,y1);
        bd.draw(shape);
    }

    //矩形の描画
    public function drawRect(x:Number,y:Number,w:Number,h:Number):Void {
        shape.clear();
        shape.lineStyle(0,color);
        shape.moveTo(x,y);
        shape.lineTo(x+w,y);
        shape.lineTo(x+w,y+h);
        shape.lineTo(x,y+h);
        shape.lineTo(x,y);
        bd.draw(shape);
    }
        
    //塗り潰し矩形の描画
    public function fillRect(x:Number,y:Number,w:Number,h:Number):Void {
        shape.clear();
        shape.beginFill(color);
        shape.lineStyle(0,color);
        shape.moveTo(x,y);
        shape.lineTo(x+w,y);
        shape.lineTo(x+w,y+h);
        shape.lineTo(x,y+h);
        shape.lineTo(x,y);
        shape.endFill();
        bd.draw(shape);
    }

    //文字列の描画
    public function drawString(text:String,x:Number,y:Number):Void {
        if (text==null) return;
        label.text=text;
        label.setTextFormat(format);
        var pos:Matrix=new Matrix();
        pos.translate(
            x-(label._width -label.textWidth)/2,
            y-(label._height-label.textHeight)/2-label.textHeight);
        bd.draw(label,pos);     
    }

    //イメージの描画
    public function drawImage(source:Object,x:Number,y:Number,
        sx:Number,sy:Number,sw:Number,sh:Number):Void {
        if (source==null) return;
        var pos:Matrix=new Matrix();
        pos.translate(x-sx,y-sy);
        if (sx==undefined) {
            bd.draw(source,pos);
        } else {
            bd.draw(source,pos,null,null,new Rectangle(x,y,sw,sh));
        }
    }
}


application.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<movie version="8" width="240" height="240" framerate="30">
    <background color="#ffffff"/>
    <clip import="classes.swf" />
    <frame>
        <library>
            <!-- クラス -->
            <clip id="Application" class="BitmapEx" />

            <!-- リソース -->
            <clip id="sample" import="sample.png" />
        </library>
        <place id="Application" name="app" x="0" y="0" depth="1000" />
    </frame>
</movie>


コンパイル
mtasc -version 8 -swf classes.swf -header 240:240:30 BitmapEx
swfmill simple application.xml BitmapEx.swf




−戻る−