【问题标题】:Does Flex support the data uri scheme?Flex 是否支持数据 uri 方案?
【发布时间】:2010-09-28 11:05:46
【问题描述】:

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

建议的解决方案

  1. 使用 Loader.LoadBytes

试过了,它似乎不起作用(没有触发任何事件)。

<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>

谁能告诉我我做错了什么?

【问题讨论】:

    标签: apache-flex base64 png data-uri-scheme


    【解决方案1】:

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

    【讨论】:

    • 请看看我尝试使用 Loader 并告诉我我做错了什么
    【解决方案2】:

    你可以用这个来加载图片:

    var deco64:Base64Decoder = new Base64Decoder;
    
    deco64.decode("base64StringWithTheImageData");
    
    var arrBytes:ByteArray = deco64.toByteArray();
    
    img.load(arrBytes);
    

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

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

          <?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>
      

      【讨论】:

        猜你喜欢
        • 2014-09-27
        • 1970-01-01
        • 2011-06-16
        • 1970-01-01
        • 2011-08-03
        • 2019-12-27
        • 1970-01-01
        • 1970-01-01
        • 2010-10-12
        相关资源
        最近更新 更多