繁体   English   中英

在Flex中,如何创建,填充和显示位图?

[英]In Flex, how do I create, populate, and display a bitmap?

从完全空的MXML应用程序开始:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" >

</mx:Application>

什么是脚本:

  • 创建一个位图(这应该是一个BitmapData对象吗?)
  • 用数据编程填充它(例如画一个圆圈)(有没有比重复调用BitmapData.SetPixel更有效的方法?)
  • 在应用程序中呈现它(例如,居中于中间)(如何在屏幕上显示位图?在线Flash示例显示调用myBitmap=new Bitmap(myBitmapData)然后myBitmap.AddChild ,但这会在Flex中引发错误)。

??

注意:目标不仅仅是在屏幕上显示一个圆圈,而是使用SetPixel(或???)填充Bitmap(或BitmapData?或???)对象,然后将其内容放到屏幕上,就像需要在图像处理或视觉效果应用程序中进行。

你有几个选择。 第一个是检查Degrafa框架 ,它有一些非常令人难以置信的绘图工具,否则你需要添加一个脚本块并在函数中使用AS3绘图api(在这种情况下可能在creationComplete上调用:

private function handleCreationComplete():void
{
    var component:UIComponent = new UIComponent(); //needed to add to the flex display list
    var myCircle:Sprite = new Sprite();
    myCircle.graphics.beginFill(0xFFFFFF,1)
    myCircle.graphics.drawCircle(100,100,50);
    component.addChild(myCircle);
    this.addChild(component);
}

这不会使圆圈居中,但你可以想出这一点。

您可以使用此函数实际从上面的UIComponent中获取位图:

private function getBitmapData( target : UIComponent ) : BitmapData
   {
    var bd : BitmapData = new BitmapData( target.width, target.height );
    var m : Matrix = new Matrix();
    bd.draw( target, m );
    return bd;
   }

这里开始

这是一个完整的,可以根据Joel Hooks的建议创建的工作示例:

MXML FILE(ards.mxml):

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
       creationComplete="onCreationComplete()">

<mx:Script source="ards_script.as" />

</mx:Application>

脚本文件(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<component.width; i++ )
    {
        for( var j:int=0; j<component.width; j++ )
        {
            var dX:int = i - xCenter;
            var dY:int = j - yCenter;
            var q:int = dX*dX + dY*dY;
            if( q < rSquare )
            {
                    bd.setPixel( i, j, color );
            }       
        }
    }

    // create a bitmap based on the data, and add it as a child to the UIComponent to be displayed
    // (if you try to add it directly to the Application, you get a runtime error)
    var bt:Bitmap = new Bitmap(bd);
    component.addChild(bt);    
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM