2014-12-04 9 views
1

HTML5 Canvas에서 오디오 비주얼 라이저로 사용되는 일련의 직사각형에 배경 패턴으로 PNG를 사용하고 있지만 Uncaught TypeError with my 번호 :'CanvasRenderingContext2D'에서 'createPattern'을 실행하지 못했습니다.

HTML :

<canvas id="analyser_render"></canvas> 

JS :

이것은 내 실제 코드의 일부분이다
canvas = document.getElementById('analyser_render'); 
ctx = canvas.getContext('2d'); 

ctx.clearRect(0, 0, canvas.width, canvas.height); 
pattern = ctx.createPattern("images/analyser.png", "repeat-x"); 
ctx.fillStyle = pattern; 

bars = 30; 
for (var i = 0; i < bars; i++) { 
    bar_x = i * 10; 
    bar_width = 9; 
    bar_height = -(dataArray[i]/2); 
    ctx.fillRect(bar_x, canvas.height, bar_width, bar_height); 
} 

, 직사각형의 생성을 포함하는 부분. dataArray 변수는 Web Audio API의 일부이며 문제의 일부가 아닙니다.

답변

-1

이미지를 제대로로드하려면 이미지 객체를 만든 다음 소스를 설정해야합니다.

img = new Image(); 
img.src = 'images/analyser.png'; 

다음 createPattern에 제대로 당신은 또한 이미지로드가 비동기로`onload` 콜백을 사용해야합니다 이미지를로드 할 이미지 오브젝트

pattern = ctx.createPattern(img, "repeat-x"); 
+1

에게 문의하십시오. – K3N

+0

필자는 반드시 @KenFyrstenberg 일 필요는 없다. 위 코드를 내 함수에 넣기 만하면 모든 언로드없이 원하는대로 작동했다. 그런 다음 img 선언은 INIT 함수에 있었고 createPattern은 루핑 requestAnimationFrame 함수에있었습니다. 따라서 혼란이있을 수 있습니다. – Murphy1976

+1

이미지가 브라우저에 캐시되어 로컬로로드되기 때문입니다. 이 코드를 온라인에 올리면 사용자가 이미지를 처음로드 할 때 이미지가 시간에 맞게로드되거나로드되지 않을 수 있습니다. 이것이 onload *가 제대로 처리되어야하는 이유입니다. – K3N

관련 문제