在没有 HTTP 的情况下在 AIR 中加载图像和视频

发布于 2024-12-24 03:17:52 字数 325 浏览 2 评论 0原文

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

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

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

我已准备好文件对象,并且已经让用户选择从中提取媒体的本地目录,并且我从列表中获取了文件列表(基于其扩展名)...但是现在怎么办?

I'm curious what the correct methodology is for loading image and video data directly from the file system, without employing HTTP.

I'm writing an AIR slideshow application, and it works great but currently relies on a local MAMP server to hand the app all the media via the standard, tried and true, FLASH media loading methodologies.

I know that since FLASH was developed as a web plugin it handles this way of receiving data best, but I'd really like to extricate this rather onerous and unnecessary bit and have the app as a stand-alone player, however, I'm unclear what the "correct" way is to load the media.

I have the File objects ready and I've gotten as far as having the user select the local directory from which to pull the media and I'm getting a list of the files (based on their extensions) from the list... but now what?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

没有心的人 2024-12-31 03:17:52

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

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 中加载这些字节以显示图像(参见方法加载器。 loadBytes

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

干杯

You first have to put the content of your file in a ByteArray (code from 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();
    }
}

Then you may load these bytes in a Loader to display the image (see method Loader.loadBytes)

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

Cheers

小清晰的声音 2024-12-31 03:17:52

使用此代码,加载程序会触发 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,我根据您的代码编写了我的代码。

With this code the Loader fires the Event.COMPLTE event and you will be able to manipulate the Bitmap from it:

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: Thanks Kodiak, I made my code based on yours.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文