3


3

Flexでは、ビットマップをどのように作成、入力、表示するのですか。

完全に空のMXMLアプリケーションから始めます。


スクリプトは次のようになります。

  • ビットマップを作成します(これは `BitmapData`オブジェクトであるべきですか?)

  • プログラム的にデータを追加する(例: 円を描く)(あります `BitmapData.SetPixel`を繰り返し呼び出すよりも効率的な方法はありますか?)

  • アプリケーション内でレンダリングする(例: 中央に集中)(どのようにDO 画面にビットマップを取得しますか? オンラインFlashのサンプルでは、​​ `myBitmap = new Bitmap(myBitmapData)`を呼び出してから `myBitmap.AddChild`を呼び出すことを示していますが、これはFlexでエラーをスローします。

??

NOTE The goal is not just to get a circle on the screen, it’s to ビットマップ(またはBitmapData? または、SetPixel(または???)を使用してオブジェクトを作成し、その内容を画面に表示します。これは、画像処理または視覚効果アプリケーションで必要になる場合があります。

2 Answer


3


いくつかの選択肢があります。 最初は Degrafa frameworkを調べることです。これは本当に素晴らしい描画ツールを持っています。 creationCompleteで呼び出されます。

プライベート関数handleCreationComplete():void {var component:UIComponent = new UIComponent(); //フレックス表示リストに追加する必要があります。var myCircle:Sprite = new Sprite(); myCircle.graphics.beginFill(0xFFFFFF、1)myCircle.graphics.drawCircle(100,100,50); component.addChild(myCircle); this.addChild(コンポーネント); }

これで円が中心になることはありませんが、そのことはわかります。

あなたは実際に上記のUIComponentからビットマップを取得するためにこの関数を使うことができます:

プライベート関数getBitmapData(target:UIComponent):BitmapData {var bd:BitmapData = new BitmapData(target.width、target.height);} var m:Matrix = new Matrix(); bd.draw(target、m); bdを返します。 }


2


Joel Hooks氏の提案に基づいて作成できた、完成した実用的な例です。

  • MXMLファイル(ards.mxml):*


  • SCRIPT FILE(ards_script.as):*

import mx.core.UIComponent;

private function onCreationComplete():void
{
    // create a UIComponent and add it to the Flex display list
    var component:UIComponent = new UIComponent();
    component.width = this.width;
    component.height = this.height;
    component.x = 0;
    component.y = 0;
    this.addChild(component);

    // create a BitmapData object (basically an array of pixels) the same size as the screen
    var bd : BitmapData = new BitmapData( component.width, component.height );

    // draw a green circle in the bitmap data
    var xCenter:int = component.width/2;
    var yCenter:int = component.height/2;
    var r:int = Math.min(xCenter,yCenter);
    var rSquare:int = r*r;
    var color:Number = 0x00ff00;
    for( var i:int=0; i