在没有继承的情况下实现BitmapImage功能的最佳方法是什么?

时间:2011-03-31 17:15:46

标签: flex actionscript-3 flex4

this.container.addElement(myCustomImageInstance as GraphicElement)必须显示测试图像。

package com.www
{
    import spark.primitives.BitmapImage;
    import spark.primitives.supportClasses.GraphicElement;

    public class BaseTest extends GraphicElement
    {       
        public function BaseTest()
        {
            super();
        }

        /* stuff */
    }

    public class MyCustomImage extends BaseTest
    {
        private var _img:BitmapImage = null;

        public function MyCustomImage()
        {
            super();
        }

        public function get img():BitmapImage {
            if (!_img) {
                _img = new BitmapImage();
                _img.source = /* BitmapData of a test image */;
            }
            return _img;
        }

        /* It obviously does not work, any ideas?
        override public function createDisplayObject():DisplayObject {
            return img.displayObject;
        }

        override public function get displayObject():DisplayObject {
            return img.displayObject;
        }
        */

    }

}

非常感谢

1 个答案:

答案 0 :(得分:1)

mx:Image不同,spark BitmapImage类不包含用于加载位图数据的成员函数。因此,您尝试将URL推入的source属性仅用于获取实际位图数据(从SWFLoader或Loader返回的内容或嵌入的图像文件)。请参阅AS3文档:s:BitmapImage#source

虽然技术上可以在embed指令中放置一个URL(例如@Embed("http://...image.jpg")),但我假设您使用的是ActionScript而不是MXML,那么您打算动态加载图像。

在这种情况下,您需要使用mx.controls.Image,或使用单独的mx.controls.SWFLoaderflash.display.Loader来加载您需要的图片。您应该注意到加载过程是异步的。

您可能会发现以下教程非常有用,它展示了如何将flash.display.Loaders:BitmapImage一起使用,以便像mx一样使用:Image: http://polygeek.com/2452_flex_extending-spark-bitmapimage