【问题标题】:loading images and video in AIR without HTTP在没有 HTTP 的情况下在 AIR 中加载图像和视频
【发布时间】:2012-01-02 18:42:25
【问题描述】:

我很好奇在不使用 HTTP 的情况下直接从文件系统加载图像和视频数据的正确方法是什么。

我正在编写一个 AIR 幻灯片应用程序,它运行良好,但目前依赖于本地 MAMP 服务器通过标准的、经过验证的、真实的 FLASH 媒体加载方法向应用程序提供所有媒体。

我知道,由于 FLASH 是作为 Web 插件开发的,因此它可以最好地处理这种接收数据的方式,但我真的很想摆脱这个相当繁重和不必要的部分,并将该应用程序作为一个独立的播放器,但是,我不清楚加载媒体的“正确”方式是什么。

我已经准备好文件对象,并且我已经让用户选择要从中提取媒体的本地目录,并且我正在从列表中获取文件列表(基于它们的扩展名)。 .. 但现在呢?

【问题讨论】:

    标签: actionscript-3 air flash-cs5


    【解决方案1】:

    您首先必须将文件内容放入ByteArray(代码来自FileStream documentation)

    var bytes:ByteArray = new ByteArray();
    var myFileStream:FileStream = new FileStream();
    var myFile:File = File.documentsDirectory.resolvePath("test.jpg");
    
    myFileStream.addEventListener(ProgressEvent.PROGRESS, progressHandler);
    myFileStream.openAsync(myFile, FileMode.READ);
    
    function progressHandler(event:ProgressEvent):void 
    {
        if (myFileStream.bytesAvailable)
        {
            myFileStream.readBytes(bytes, myFileStream.position, myFileStream.bytesAvailable);
        }
        else
        {
            myFileStream.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
            loadImage();
        }
    }
    

    然后您可以将这些字节加载到Loader 中以显示图像(参见方法Loader.loadBytes)

    function loadImage():void
    {
        var loader:Loader = new Loader();
        loader.loadBytes(bytes);    
        addChild(loader);
    }
    

    干杯

    【讨论】:

      【解决方案2】:

      使用此代码,加载程序会触发 Event.COMPLTE 事件,您将能够从中操作位图:

      var bytes:ByteArray = new ByteArray();
      var myFileStream:FileStream = new FileStream();
      var myFile:File = File.documentsDirectory.resolvePath(YOUR_PATH);
      
      myFileStream.addEventListener(Event.COMPLETE, fileCompleteHandler)
      myFileStream.openAsync(myFile, FileMode.READ);
      
      function fileCompleteHandler(event:Event):void 
      {
          myFileStream.readBytes(bytes);
      
          var loader:Loader = new Loader();
          loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
          loader.loadBytes(bytes);
      
          function imageLoaded(e:Event):void
          {
              addChild(Bitmap(loader.content));
              myFileStream.removeEventListener(Event.COMPLETE, fileCompleteHandler);
              myFileStream.close();
          }
      }
      

      PS:感谢 Kodiak,我根据你的代码编写了代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-02
        • 2015-11-29
        • 1970-01-01
        • 2010-10-23
        • 2012-06-11
        • 1970-01-01
        • 2021-10-27
        • 1970-01-01
        相关资源
        最近更新 更多