CODEONWORT

copyPixels로 투명 비트맵 결합하기 본문

Season 1/플래시

copyPixels로 투명 비트맵 결합하기

codeonwort 2011.07.29 11:28

다음과 같이 코드를 준비하자.

mc.alpha = 0.5 // 사각형이 그려진 표시 객체
var src:BitmapData = new BitmapData(600, 300, true, 0x0)
src.draw(mc, null, mc.transform.colorTransform)

var dst:BitmapData = new BitmapData(600, 300, true, 0x0)
dst.perlinNoise(300, 300, 8, 0, true, true)
addChild(new Bitmap(dst))

src는 투명 비트맵이며 여기에 반투명한 표시 객체를 그렸다. 투명 비트맵을 하나 더 만들고 펄린 노이즈를 그려둔다.

이제 다음 코드를 추가하면

dst.copyPixels(src, src.rect, new Point)

src의 투명한 부분까지 그대로 복사해오기 때문에 펄린 노이즈는 없어진다.
 
나는 dst에 그려져 있던 걸 유지하면서 src의 투명한 부분을 빼고 복사해오고 싶다. 즉 dst.draw(src) 와 같은 효과를 내고 싶다. copyPixels의 다섯 번째 매개변수인 mergeAlpha를 true로 설정하면

dst.copyPixels(src, src.rect, new Point, null, null, true)


원하는 대로 그려진다. 이제 수행속도가 관건이다. dst.draw(src)를 쓸 수 없는 이유는 copyPixels보다 느리기 때문이다. mergeAlpha를 true로 하면 더 느려질까?

import codeonwort.zz.Stopwatch
var i:int, zero:Point = new Point

Stopwatch.start()
for(i=0 ; i<1000 ; i++) dst.copyPixels(src, src.rect, zero, null, null, true)
Stopwatch.stop()

Stopwatch.start()
for(i=0 ; i<1000 ; i++) dst.copyPixels(src, src.rect, zero)
Stopwatch.stop()

측정 결과 mergeAlpha가 true인 게 2.5배 더 빠르다.
203
558

결론은 내가 원하는 결과를 얻으면서도 속도가 더 빨라졌다는 것이다 이야호 유후 화 오아!!

* 내용 추가
src의 가로 세로 크기에 따라 mergeAlpha=true가 더 빠르기도 하고 더 느리기도 한데 기준이 뭐냐..
0 Comments
댓글쓰기 폼