2017-04-06 13 views
0

나는 약간의 스크래치를하고있는 중이 야 /를 AlphaMaskFilter 예에 따라 게임을 공개 : http://createjs.com/demos/easeljs/AlphaMaskReveal.html어떻게 AlphaMaskFilter 완전히 easeljs/createjs에서 사라진 것을 감지하는

나는 마스크가 완전히 사라진 것을 감지 할, 또는 임계 값을 사용하십시오 (예 : 90 % 스크래치).

AlphaMaskFilter, 도형 및 그래픽 개체에 관한 문서를 읽었으며이를 달성하는 방법을 잘 모르겠습니다.

Im 확실하지 않음 i 픽셀 정보에 액세스 할 수 없으며 알파 채널을 감지하여이를 감지하지만 성능 문제가 있는지 궁금합니다.

아무 도움도 환영합니다, 감사합니다.

**** 편집 ****

그래서, 나는 AlphaMapFilter (감사 레니)를 사용하여 투명성의 PCT를 가질 수 있었다 허용 대답의 ****에 담기. AlphaMapFilter는 모든 픽셀의 알파 채널에 매핑을 제공합니다. 다음은 나를 위해 일한 약간의 샘플 코드입니다 :

 // mShapeToScratch is a createjs Shape. like in the http://createjs.com/demos/easeljs/AlphaMaskReveal.html example 
     var alphaMaskFilter = new createjs.AlphaMapFilter(mShapeToScratch.cacheCanvas); 
     var canvas = alphaMaskFilter.alphaMap; 
     var ctx = canvas.getContext("2d"); 
     var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height); 
     var alphaData = imgData.data; 
     var pixelTotal = rect.h*rect.w; 
     var transparentPixel = 0; 

     // rect.h is the height of the image and rect.w is the width not shown in the example 
     for (var y = 0; y < rect.h; ++y) 
     { 
      for (var x=0; x < rect.w; ++x) 
      { 
      var pixelIdx = (y*rect.w + x); 

      if(alphaData[pixelIdx] > 128) // transparent will be 255. 
      { 
       transparentPixel++; 
      } 
     } 

     console.log("transparent % = " + transparentPixel/pixelTotal); 

이 예제는 모든 픽셀을 검사하지만, 레니는 제안의 속도를 체크 한 모든 X 픽셀을 확인하는 매우 간단합니다.

답변

0

알파 마스크는 픽셀 액세스가 아닌 캔버스 합성 작업을 사용하므로 완벽하게 맞춤화 된 방법이 없어도이를 수행 할 수있는 방법은 없습니다.

픽셀 반복 (예를 들어 AlphaMapFilter를 확인하십시오)이 효과적 일 수 있지만 상당히 느릴 수 있습니다. 어쩌면 4, 10 또는 25 픽셀마다 검사하면 속도가 빨라질 것입니다.

건배.

+0

감사합니다. Lanny, 올바르게 이해하면 이라고 말하고 있습니다. A) AlphaMaskFilter로 공개 량을 쉽게 감지 할 수있는 방법이 없습니다. 및 B) 픽셀 검사 솔루션을 사용하려면 AlphaMaskFilter를 사용할 수 없습니다. 대신 AlphaMapFilter를 사용해야합니다. 나는 correclty를 이해 했는가? – ManriK

+0

AlphaMapFilter는 특정 채널을 사용하므로 압축 된 JPG를 마스크로 제공 할 수 있습니다. AlphaMapFilter 접근법 (픽셀 확인)을 사용하는 사용자 정의 필터를 만들고 대신 알파를 확인하도록 변경 한 다음 일종의 적용 알고리즘을 구현해야합니다. – Lanny