2013-04-12 4 views
0

그레이 스케일 이미지 http://www.html5canvastutorials.com/advanced/html5-canvas-grayscale-image-colors-tutorial/을로드하려면 다음 예제를 따르려고합니다.키네틱 JS - 로딩 GrayScale 이미지

var dImage1 = new Kinetic.Image({ 
       drawFunc: function (canvas) { 
        var context2 = canvas.getContext(); 
        var x = 0; 
        var y = 0; 
        context2.drawImage(imageObj, x, y); 
        var imageData = context2.getImageData(x, y, imageObj.width, imageObj.height); 
        var data = imageData.data; 

        for (var i = 0; i < data.length; i += 4) { 
         var brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2]; 
         data[i] = brightness; 
         data[i + 1] = brightness; 
         data[i + 2] = brightness; 
        } 
        context2.putImageData(imageData, x, y); 
       } 
      }); 
      layer1.add(dImage1); 
      stage.add(layer1); 

      var imageObj = new Image(); 
      imageObj.onload = function() { 
       drawImage(this); 
      }; 
      imageObj.src = .....; 

나는이 오류가 발생했습니다 : TypeMismatchError 내 단계는 많은 다른 목적을 가지고 있기 때문에, 나는 follwing을 스크립트를 사용했습니다. 미리 감사드립니다.

답변

0

나는 ("2D")

먼저, 사양이이 옵션 말한다하더라도, 당신은 상황에 맞는 모드를 지정해야합니다 ... 코드에서 개는 몇 참조

// must specify "2d" 

var context2 = canvas.getContext("2d"); 

두 번째

function makeKineticImage(){ 

    var dImage1 = new Kinetic.Image({ 
     drawFunc: function (canvas) { 
      var context2 = canvas.getContext("2d"); 
      var x = 0; 
      var y = 0; 
      context2.drawImage(imageObj, x, y); 
      var imageData = context2.getImageData(x, y, imageObj.width, imageObj.height); 
      var data = imageData.data; 

      for (var i = 0; i < data.length; i += 4) { 
       var brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2]; 
       data[i] = brightness; 
       data[i + 1] = brightness; 
       data[i + 2] = brightness; 
      } 
      context2.putImageData(imageData, x, y); 
     } 
    }); 
    layer1.add(dImage1); 
} 

stage.add(layer1); 

// you must create your Kinetic.Image AFTER your image is loaded 

var imageObj = new Image(); 
imageObj.onload = function() { 
    makeKineticImage(); 
}; 
imageObj.src = .....; 
012 : 당신은 당신이 Kinetic.Image

그래서 함수에 Kinetic.Image 생성을 넣고 imageObj.onload에 전화에 사용하기 전에 완전히 이미지를로드 할 필요

+0

Mark, 정말 잘해 줘서 고마워. – hncl

+0

마크,이 줄의 이미지 너비와 높이를 변경할 수 있습니까? context2.getImageData (x, y, dicom1.width, dicom1.height); ~로 되려면 context2.getImageData (x, y, 512, 512); 시도했지만 작동하지 않았습니다. 또한 어떻게 오프셋 값을 추가 할 수 있습니까? 도와 주셔서 정말 감사합니다. – hncl

+0

물론입니다. getImageData는 임의의 X/Y에서 시작하는 픽셀의 직사각형 덩어리를 가져옵니다. 따라서 getImageData (myOffsetX, myOffsetY, 512,512)를 사용하여 원하는 오프셋 X/Y에서 512x512 크기의 픽셀 청크를 얻을 수 있습니다. 오류가 발생하는 경우 캔버스의 가장자리를 넘어 픽셀을 요청하지 않았는지 확인하십시오. 따라서 캔버스가 1000x1000이고 getImageData (700,700,512,512)를 수행하면 오류가 발생합니다. – markE