2014-10-01 2 views
2

이미지의 픽셀을 변경하는 데 Javascript 캔버스를 사용하고 있습니다. 어떤 시점에서 jsfeat.js 라이브러리로 작업하려면 배열 버퍼가 필요합니다.배열 버퍼 IE10 - 형식화 된 배열 생성자 인수가 잘못되었습니다

IE10이 줄에서 "형식화 된 배열 생성자 인수가 유효하지 않습니다"라고 나에게 이야기한다 :

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

내가 imagedata.data.buffer을 CONSOLE.LOG 때, IE10에서 "정의되지 않은"저를 제공합니다. 크롬에서는 "ArrayBuffer {}"가 있습니다.

데이터를 직접 전달하면 효과가 작동하지 않습니다.

어떻게 해결할 수 있습니까?

+0

'이미지 데이터'란 무엇입니까? 어떻게 지내니? – Cerbrus

+0

간단한 ctx.getImageData. 나는 대답을 편집했습니다. – arlg

답변

0

IE10의 .getImageData은 최신 Uint32Array가 아닌 CanvasPixelArray를 사용했습니다.

CanvasPixelArray.data에는 .buffer 속성이 없습니다 (Uint32Array는 IE10을 사용할 수 있지만이 캔버스에 구현되지 않았습니다) - 그것은 당신의 오류 경고의 원인입니다.

data_u32에 imageData를 "수동으로"로드하는 예제 코드.

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

+0

그것은 나를 위해하지 않았다. 첫째, 배열의 길이는'var * data_u32 = new Uint32Array (imageData.data.buffer);'와'data_u32.length'가'imageData.data.length/4'가' W * H'. 당신의 코드에서 당신은 unset'n'을 참조하고 있습니다. 이 존경받는 임씨는 아직 결과를 얻지 못하고 있습니다. (jsfeats 'canny edge detector로 작업하는 임) – InsOp