【问题标题】:How to turn data downloaded from JQuery.get, into ArrayBuffer?如何将从 JQuery.get 下载的数据转换为 ArrayBuffer?
【发布时间】:2011-07-19 14:19:06
【问题描述】:

在过去的三天里,我一直试图用我知道的各种关键字来寻找答案,但没能走得更远。我是 JavaScript/WebGL 的新手,所以这可能是我完全无知,如果是这样,请原谅我。

这是我从服务器下载二进制文件(自定义图像文件格式)并从下载的数据中读取前四个字节(Int32)的操作:

TileImage.prototype.LoadFromUrl = function (imageUrl) {
    $.get(imageUrl, function (imageData) {
        var buffer = new ArrayBuffer(imageData); // Verified 'imageData' is good.
        var view = new DataView(buffer);         // Create a data view on buffer.
        var dwordValue = view.getInt32(0);       // Read the first four bytes.
        alert("The first Uint32 value is " + dwordValue);
    });
}

下载的数据'imageData'的大小(imageData.length)与服务器上的文件一样,所以我认为下载成功。

我打算读入下载的文件,并提取标题信息(并使用 WebGL Texture2D 中的其余图像数据进行显示)。那么问题来了:这是处理下载的自定义图像(在 WebGL 中用作纹理)的方式吗?如果不是,那您的建议是什么?

【问题讨论】:

    标签: jquery webgl dataview texture2d arraybuffer


    【解决方案1】:

    以下是使用普通的 ol' XHR 的方法: http://www.html5rocks.com/en/tutorials/file/xhr2/#toc-reponseTypeArrayBuffer

    您需要将 xhr 对象的 responseType 属性设置为 'arraybuffer'。

    如果您的图像数据是未压缩的 RGBA,它应该可以在 WebGL 中按原样使用。如果是压缩的,则需要先将其放入图像中。有关如何创建对象 URL 并将其用作图像 src,请参阅 Blob API。

    var blob = new BlobBuilder().append(arraybuffer).getBlob();
    img.onload = function() { window.URL.revokeObjectURL(this.src); };
    img.src = window.URL.createObjectURL(blob);
    

    【讨论】:

    • 抱歉回复晚了,我的日常工作并没有给我太多时间。感谢您的提示,Ilmari,他们帮了很多忙!不幸的是,它不适用于我最新的 Firefox(当然还有 IE 9,但这并不让我太担心)。我仍在尝试找出一种在 Firefox 5.0 中工作的方法(因为 jQuery.get 有效),所以如果我还有其他需要知道的,请给我一个指点。再次感谢:)
    • 嗨@Ilmari,Firefox 6.0 Beta 似乎支持它!好消息,他们目前还没有实现 Uint8Array 和 DataView 让我读入缓冲区,但 Int8Array 至少可供我使用:)
    • 抱歉,支持 Uint8Array,我打错了 UInt8Array!
    猜你喜欢
    • 2020-09-22
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 2011-11-25
    • 1970-01-01
    相关资源
    最近更新 更多