▼Adobe AIRメモ▼
ビットマップの利用


ビットマップの利用を行うプログラムを作成する。

リソース
sample.gif


ソースコード
BitmapEx.as
package {
    import flash.display.Bitmap;
    import flash.display.Sprite;
    import flash.geom.*;
    
    //ビットマップの利用
    public class BitmapEx extends Sprite {
        //素材クラスの定義
        [Embed(source='sample.gif')]
        private var Sample:Class;
        
        //変数
        private var g:Graphics;

        //コンストラクタ
        public function BitmapEx() {
            //素材オブジェクトの生成
            var image:Bitmap=new Sample();
            
            //Graphicsオブジェクトの生成
            g=new Graphics(240,240);
            
            //Bitmapオブジェクトの追加
            addChild(new Bitmap(g.getBitmapData()));
            
            //背景の描画
            g.setColor(g.getColorOfName(Graphics.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(Graphics.RED));
            g.drawString("テキストのテスト!",10,200);
        }
    }
}

GraphicsEx.as
package {
    import flash.display.BitmapData;
    import flash.display.IBitmapDrawable;
    import flash.display.Shape;
    import flash.geom.*
    import flash.text.*;
    
    //iアプリ風Graphicsクラス
    public class Graphics {
        //色定数
        public static const 
            AQUA:uint   =(  0<<16)+(255<<8)+255,//水色
            BLACK:uint  =(  0<<16)+(  0<<8)+  0,//黒
            BLUE:uint   =(  0<<16)+(  0<<8)+255,//青
            FUCHSIA:uint=(255<<16)+(  0<<8)+255,//紫
            GRAY:uint   =(128<<16)+(128<<8)+128,//灰
            GREEN:uint  =(  0<<16)+(128<<8)+  0,//暗い緑
            LIME:uint   =(  0<<16)+(255<<8)+  0,//緑
            MAROON:uint =(128<<16)+(  0<<8)+  0,//暗い赤
            NAVY:uint   =(  0<<16)+(  0<<8)+128,//暗い青
            OLIVE:uint  =(128<<16)+(128<<8)+  0,//暗い黄
            PURPLE:uint =(128<<16)+(  0<<8)+128,//暗い紫
            RED:uint    =(255<<16)+(  0<<8)+  0,//赤
            SILVER:uint =(192<<16)+(192<<8)+192,//銀
            TEAL:uint   =(  0<<16)+(128<<8)+128,//暗い水色
            WHITE:uint  =(255<<16)+(255<<8)+255,//白
            YELLOW:uint =(255<<16)+(255<<8)+  0;//黄

        //変数
        private var bd:BitmapData;    //BMPデータ
        private var color:uint;       //色
        private var label:TextField;  //ラベル
        private var format:TextFormat;//フォーマット

        //コンストラクタ
        public function Graphics(w:uint=240,h:uint=240) {           
            //BMPデータ
            bd=new BitmapData(w,h,false,0xffffff);
            //色
            color=0x000000; 
            //ラベル
            label=new TextField();
            label.autoSize=TextFieldAutoSize.LEFT;
            //フォーマット
            format=new TextFormat();
            format.font ="_等幅";
            format.color=0x000000;
            setFontSize(12);
        }
        
        //BMPデータの取得
        public function getBitmapData():BitmapData {
            return bd;
        }

        //ピクセル単位でのフォントサイズの指定
        public function setFontSize(size:int):void {
            var i:uint;
            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):int {
            label.text=text;
            label.setTextFormat(format);
            return label.textWidth; 
        }

        //文字列高さの取得
        public function stringHeight(text:String):int {
            label.text=text;
            label.setTextFormat(format);
            return label.textHeight; 
        }
        
        //色の指定
        public function setColor(color:uint):void {
            this.color=color;
            format.color=color;
        }

        //色の取得
        public function getColorOfRGB(r:uint,g:uint,b:uint):uint {
            return (r<<16)+(g<<8)+b;
        }
        
        //色の取得
        public function getColorOfName(name:uint):uint {
            return name;
        }        
        
        //塗り潰し矩形の描画
        public function fillRect(x:int,y:int,w:uint,h:uint):void {
            bd.fillRect(new Rectangle(x,y,w,h),color);
        }        
        
        //ラインの描画
        public function drawLine(x0:int,y0:int,x1:int,y1:int):void {
            var line:Shape=new Shape();
            line.graphics.lineStyle(0,color);
            line.graphics.moveTo(x0,y0);
            line.graphics.lineTo(x1,y1);
            bd.draw(line);
        }

        //矩形の描画
        public function drawRect(x:int,y:int,w:int,h:int):void {
            var line:Shape=new Shape();
            line.graphics.lineStyle(0,color);
            line.graphics.moveTo(x,y);
            line.graphics.lineTo(x+w,y);
            line.graphics.lineTo(x+w,y+h);
            line.graphics.lineTo(x,y+h);
            line.graphics.lineTo(x,y);
            bd.draw(line);
        }
        
        //文字列の描画
        public function drawString(text:String,x:int,y:int):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:IBitmapDrawable,x:int,y:int):void {
            if (source==null) return;
            var pos:Matrix=new Matrix();
            pos.translate(x,y);
            bd.draw(source,pos);
        }
    }
}



−戻る−