2014-10-01 180 views
2

使用Javascript畫布來改變圖像上的像素。在某些時候,我需要數組緩衝區來處理jsfeat.js庫。數組緩衝區IE10 - 鍵入的數組構造函數參數無效

IE10告訴我,「類型數組構造函數的參數是無效的」,在這條線:

var imageData = ctx.getImageData(0, 0, W, H); 
var data_u32 = new Uint32Array(imagedata.data.buffer); 

當我CONSOLE.LOG imagedata.data.buffer,它給了我在IE10「不確定」。在Chrome中我有「ArrayBuffer {}」。

如果我直接傳遞數據,效果不起作用。

我該如何解決這個問題?

+0

什麼是'imagedata'?你如何設置它? – Cerbrus 2014-10-01 09:34:53

+0

只是一個簡單的ctx.getImageData。我編輯了myquestion – arlg 2014-10-01 10:42:54

回答

0

IE10的.getImageData使用了CanvasPixelArray而不是新的Uint32Array。

(Uint32Array是提供給IE10,但它並沒有在畫布上實現)

的CanvasPixelArray.data沒有.buffer財產 - 這是你的錯誤警告的原因。

「手動」將imageData加載到data_u32中的示例代碼。

var imageData = ctx.getImageData(0, 0, W, H); 

// init the array by size 
var data_u32 = new Uint32Array(W*H*4); 

// fill the array "manually" 
var data=imageData.data; 
for(var i=0;i<data.length;i++){ 
    data_u32[n]=data[n]; 
} 
+0

感謝您的回答,我會在我的項目中嘗試它,當我回到它。如果它能正常工作,我會盡快發佈! – arlg 2014-10-02 14:25:58

+0

它不適合我。首先,數組長度必須是'W * H',因爲'var data_u32 = new Uint32Array(imageData.data.buffer);','data_u32.length'等於'imageData.data.length/4'等於' W * H'。那麼在你的代碼中你指的是一個未設置的'n'。有了這個受人尊敬的我仍然沒有得到我期待的結果。 (我正在與jsfeats的canny邊緣檢測器一起工作) – InsOp 2015-07-22 09:13:52