2010-01-02 4 views
0

직사각형이 아닌 원으로 ​​BitmapData에 colorTransform을 적용 할 수 있습니까?circular colorTransform

아래 코드에서와 같이 알파 채널을 줄여 이미지의 사각형 부분을 지우는 대신 원으로 처리하고 싶습니다.

_bitmap.colorTransform(new Rectangle(mouseX-d/2, mouseY-d/2, d, d), 
new ColorTransform(1, 1, 1, .5, 0, 0, 0, 1)); 

가 나는 픽셀을 통해 루프 알파 값을 추출하고와 setPixel를 사용하는 몇 가지 코드를 할 수 있지만 colorTransform이 기능보다 훨씬 느린 솔기.

+0

setPixel에서 BitmapData를 올바르게 사용하고 있습니까? – chakrit

+0

예, 알파 채널을 사용할 때 setPixel32도 사용해야합니다. –

답변

1

드로잉 API (flash.display.Graphics)를 사용하여 원을 만든 다음 BlendMode.ERASE를 사용하여 비트 맵 데이터에 그려 봅니다. 내가 제대로 이해하면 문제가 해결 될 수도 있습니다.

var circle : Shape = new Shape; 
circle.graphics.beginFill(0xffcc00, 1); 
circle.graphics.drawEllipse(-50, -50, 100, 100); 

// Create a transformation matrix for the draw() operation, with 
// a translation matching the mouse position. 
var mtx : Matrix = new Matrix(); 
mtx.translate(mouseX, mouseY); 

// Draw circle at mouse position with the ERASE blend mode, to 
// set affected pixels to alpha=0. 
myBitmap.draw(circle, mtx, null, BlendMode.ERASE); 

나는 지우기 혼합 모드는 무승부() 명령으로 만족스럽게 작동 100 % 모르겠지만, 왜 안 나는 볼 수 없습니다. 그것이 어떻게 작동하는지 알려 주시기 바랍니다!

+0

매력 작품! 내가 만든 유일한 변화는 내가 사용한 colorTransform과 동일한 효과를 얻기 위해 0.5 배 이하로 원의 채우기를 설정하는 것이 었습니다. 그것은 이미지를 더 천천히 지우는 것입니다. 많은 감사합니다. –

+0

또 다른 방법은 3 번째 ColorTransform 매개 변수 인 _bitmap.draw (circle, mtx, new ColorTransform (1, 1, 1, .5), 0, 0, 0, 1), BlendMode를 사용하는 것입니다. 지우기) –

+0

기쁩니다! 단순히 알파를 줄이기 위해 ColorTransform을 사용하는 것과 관련하여 내 직감은 원을 채우는 데 <1 알파를 사용하는 것뿐만 아니라 수행 할 수도 없다고합니다. 그릴 때마다 ColorTransform이 적용될 것이고 샘플 코드에서 인스턴스화되므로 간단히 말해 하나의 추가 작업을 의미합니다. – richardolsson

관련 문제