Flex支持数据uri方案吗?

时间:2008-12-26 08:59:44

标签: flex base64 png data-uri-scheme

我希望在XML响应中将许多小的PNG文件作为base64编码的URI传递,但似乎没有办法使flex呈现这些图像。我在考虑数据uri方案,但似乎不支持。

提议的解决方案

  1. 使用Loader.LoadBytes
  2. 尝试了它并且它似乎不起作用(没有触发任何事件)。

    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="1276" height="849" creationComplete="drawImage()">
        <mx:Script>
            <![CDATA[
                    import mx.controls.Alert;
                    import mx.utils.Base64Decoder;
    
                    private function loaderCompleteHandler(event:Event):void {
                            Alert.show("loader done");
                }
    
                private function errorHandler(e:IOErrorEvent):void {
                    Alert.show("error" + e.toString());
                }
    
                    public function drawImage() : void
                    {
                            var b64png : String = "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1JREFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jqch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0vr4MkhoXe0rZigAAAABJRU5ErkJggg==";
                            var l : Loader = new Loader();
    
                            var decoder : Base64Decoder = new Base64Decoder();
                            decoder.decode(b64png);
                            var bytes : ByteArray = decoder.flush();
    
    
                            l.addEventListener(Event.COMPLETE, loaderCompleteHandler);
                            l.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
    
                            l.loadBytes(bytes);
    
                    }
            ]]>
        </mx:Script>
        <mx:Image x="10" y="10" width="155" height="118" id="image1"/>
    </mx:Application>
    

    有人可以告诉我我做错了吗?

3 个答案:

答案 0 :(得分:2)

如果将图像数据解码为ByteArray,则可以使用Loader.loadBytes(byteArray)将其作为图像加载。

答案 1 :(得分:0)

您可以使用此方法加载图片:

var deco64:Base64Decoder = new Base64Decoder;

deco64.decode("base64StringWithTheImageData");

var arrBytes:ByteArray = deco64.toByteArray();

img.load(arrBytes);

希望这有帮助!

答案 2 :(得分:-1)

您可以将解码器返回的字节数组直接分配给图像的源属性。

    <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="init()">
    <mx:Script>
        <![CDATA[
            import mx.utils.Base64Decoder;

            private function init():void {
                var b64png : String = "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1JREFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jqch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0vr4MkhoXe0rZigAAAABJRU5ErkJggg==";
                var decoder : Base64Decoder = new Base64Decoder();
                decoder.decode(b64png);
                var bytes : ByteArray = decoder.flush();
                img.source = bytes;
            }
        ]]>
    </mx:Script>
    <mx:Image id="img" />
</mx:Application>