devmae
개발자 향기
devmae
전체 방문자
오늘
어제
  • 전부 감상 (280)
    • Unity (52)
      • memo (37)
      • R&D (15)
    • 모바일 (32)
      • iOS (6)
      • Android (25)
    • 개발자 모드 (41)
      • 개발자처럼 파고들기 (28)
      • 한가해서 책읽는거 아님 (10)
      • 영상 요약 (3)
    • Languages (40)
      • C++ (23)
      • MFC (8)
      • Java (4)
      • javascript (5)
    • Flash (108)
      • tip (29)
      • tech (4)
      • as2.0 (1)
      • as3isolib (3)
      • flartoolkit (2)
      • 이미지 편집기 (2)
      • papervision3d (12)
      • scale form (2)
      • Flash Builder (12)
      • air (5)
      • as3.0 (20)
      • flash player (9)
      • 개념잡기 (6)
      • source (1)
    • +,-,×,÷ (3)
      • 수학 뽀개기 (3)

블로그 메뉴

  • 홈
  • 방명록

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
devmae

개발자 향기

Flash/tech

ByteArray를 이용해 BitmapData 속도 높이기

2009. 7. 31. 17:46

BitmapData의 getPixel과 setPixel대신


ByteArray를 이용하면


어느정도 속도를 높일 수 있을까 시험해 봤습니다.







해당 좌표의 color 를 얻어오는 getPixel 메소드 테스트 입니다.






var t:uint;
function start(){
 t=getTimer()
}
function result(){
 trace((getTimer()-t)+" millisecond")
}
var xx,yy,i
var w:uint=stage.stageWidth
var h:uint=stage.stageHeight
var bitmap:BitmapData=new BitmapData(w,h)
bitmap.draw(img)
var data:ByteArray=new ByteArray()
addChild(new Bitmap(bitmap))
img.visible=false

//getPixel32
start()
for(i=0;i<100;i++){
 for(yy=0;yy<h;yy++){
  for(xx=0;xx<w;xx++){
   bitmap.getPixel32(xx,yy)
  }
 }
}
result()

//3546 millisecond


//readUnsignedInt

data=bitmap.getPixels(bitmap.rect)
start()
for(i=0;i<100;i++){
 data.position=0
 for(yy=0;yy<h;yy++){
  for(xx=0;xx<w;xx++){
   data.readUnsignedInt()
  }
 }
}
result()

//2713 millisecond







 

 

해당 좌표의 color 를 할당하는 setPixel 메소드 테스트 입니다.





var t:uint;
function start(){
 t=getTimer()
}
function result(){
 trace((getTimer()-t)+" millisecond")
}
var xx,yy,i
var w:uint=stage.stageWidth
var h:uint=stage.stageHeight
var bitmap:BitmapData=new BitmapData(w,h)
var data:ByteArray=new ByteArray()
addChild(new Bitmap(bitmap))

//setPixel32

start()
for(i=0;i<100;i++){
 for(yy=0;yy<h;yy++){
  for(xx=0;xx<w;xx++){
   bitmap.setPixel32(xx,yy,uint(Math.random()*0xffffffff))
  }
 }
}
result()

//11056 millisecond


//writeUnsignedInt & setPixels
start()
for(i=0;i<100;i++){
 for(yy=0;yy<h;yy++){
  for(xx=0;xx<w;xx++){
   data.writeUnsignedInt(uint(Math.random()*0xffffffff))
  }
 }
 data.position=0
 bitmap.setPixels(bitmap.rect,data)
}
result()

//10314 millisecond


//writeUnsignedInt
start()
for(i=0;i<100;i++){
 data.position=0
 for(yy=0;yy<h;yy++){
  for(xx=0;xx<w;xx++){
   data.writeUnsignedInt(uint(Math.random()*0xffffffff))
  }
 }
}
data.position=0
bitmap.setPixels(bitmap.rect,data)
result()

//9150 millisecond






※스크립트 실행 제한시간인 15초를 벗어나 주석처리하며 하나씩 테스트하였음



결론

읽기는 24%

쓰기는 18%

속도가 향상되었습니다.


기능은 제한적이지만  비트맵 한픽셀씩 전체적으로 무언가를 연산할때

예로들면 한 픽셀을 파티클처럼 객체로 다룰때 속도향상에 도움될 것 같습니다.

[출처] ByteArray를 이용해 BitmapData 속도 높이기 (플래시(Flash)로 생계를 이어가는 사람들의 모임:플생사모) |작성자 스카야마


    'Flash/tech' 카테고리의 다른 글
    • html에 파라미터 넘기고 플래시에서 받기
    • ActionScript Performance Optimization 1
    • 폰트 라이브러리
    devmae
    devmae
    enjoy with me?

    티스토리툴바