AIR - 从拖放到舞台添加图像

时间:2012-09-11 13:16:09

标签: actionscript-3 flash flex air drag-and-drop

我正在Adobe AIR中构建一个Tile Viewer,到目前为止,我已经实现了拖放功能,允许用户加载PNG和JPG文件。

该函数返回':File'格式,但是我如何克服':Bitmap'数据并在循环时将图像放在现有的动画片段中,并使一个图块图像在x和y中重复,以便预览将显示tilemap?

我的想法是简单地添加那个文件的实例,但我不知道确切的代码。 (创建一个Loader,将File格式传递给它,并通过定义位置x和y以及定义宽度和高度来获取BitmapData并将其放置到位。我也想制作实例,代码不会加载图像10 x 10次​​)

我会很高兴收到所有有用的答案。

编辑:

示例理论:

(没有正确的语法)

image = new ImageFromDropBox(); // bitmap or whatever

for( x = 0; x < 10; x++) {
    for( y = 0; y < 10; y++) {
        image.x = tilesize * x;
        image.y = tileSize * y;
        image.width = tileSize;
        image.height = tileSize;
        stage.addChild( image ); // so each of the 100 places images should be just instances of the ONE LOADED IMAGE
    }
}

1 个答案:

答案 0 :(得分:0)

使用File类时,可以使用fileInstance.url参数在加载器中加载所述文件:

var loader:Loader = new Loader();
var urlReq:URLRequest = new URLRequest(file.url);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
loader.load(urlReq);

function loaded(e:Event):void {
    var bmp:Bitmap = loader.content as Bitmap

    //scale it down and create a scaled down bitmap data for more efficient memory usage
    bmp.width = tileSize;
    bmp.height = tileSize;

    var bData:BitmapData = new BitmapData(tileSize,tileSize); //your new bitmap data
    bData.draw(bmp); //capture the scaled down version of the bitmap

    //if you don't need the original anymore, dispose of it
    bmp.bitmapData.dispose();     

    var image:Bitmap;

    for( var x:int = 0; x < 10; x++) {
        for( var y:int = 0; y < 10; y++) {
            image = new Bitmap(bmp.bData);
            image.x = tilesize * x;
            image.y = tileSize * y;
            image.width = tileSize;
            image.height = tileSize;
            stage.addChild( image );
       }
   }
}