2011-07-19 25 views
1

我已經嘗試在過去的三天裏用我所知道的各種關鍵詞找到答案,但是不能走得太遠。我是JavaScript/WebGL的新手,所以這可能會成爲我完全的無知,請原諒我,如果是這樣的話。如何將從JQuery.get下載的數據轉換爲ArrayBuffer?

這是我做的下載從我的服務器的二進制文件(自定義圖像文件格式),並讀取前四個字節(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中的紋理)?如果不是,那麼你的建議是什麼?

回答

2

下面是如何使用純醇做」 XHR: http://www.html5rocks.com/en/tutorials/file/xhr2/#toc-reponseTypeArrayBuffer

您需要XHR對象的responseTyp的屬性設置爲‘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); 
+0

對不起,遲到的回覆,我的日常工作並沒有讓我多花時間。感謝提示,Ilmari,他們幫了很多!不幸的是,它不適用於我最新的Firefox(當然還有IE 9,但這並不會讓我太擔心)。我仍然在想辦法讓它在Firefox 5.0中工作(因爲jQuery.get有效),所以如果還有其他事情我需要知道,請給我一個指針。再次感謝:) –

+0

嗨@Ilmari,它似乎像Firefox 6.0 Beta支持它!好消息是,他們目前還沒有實現Uint8Array和DataView讓我讀入緩衝區,但Int8Array在那裏對我來說至少是:) –

+0

我的歉意,Uint8Array被支持,我錯誤地將它輸入爲UInt8Array! –