본문 바로가기

Mobile Develop/WinMoDev Q&A

화면 터치후 드레그 했을때 속도 관련 질문입니다.

질문자 : jik0101

 링크 : http://cafe.naver.com/winmodev/1430
<질문내용>

현재 PictureBox를 이용해서 png파일의 알파값을 적용시켜 이미지를 출력하고 있습니다.

그렇게 디바이스 화면에 480x800의 이미지를 출력하는데요 그때 화면에 아무곳이나 터치하여 드래그를 하면 해당 이미지가

드래그 하는것을 따라움직이는 것을 테스트 해봤습니다.

화면 갱신은 타이머로 Interval을 1로 설정하고 갱신하도록 하였고 드래그를 테스트하니 엄청 버벅되는 반응속도가 나오네요;

 

그리고 알파값을 사용하지않고 Graphics객체와 ImageAttributes를 이용해서 특정 컬러값을 지정해서 이미지 배경 투명값을 적용시키는 방법으로 화면 드래그를 테스트 해봤습니다.

이렇게 하니 반응속도가 훨씬 잘나오네요.

 

그런데 Graphics객체 ImageAttributes을 이용해서 프로그램을 만들면 디자인쪽에서 일일이 이미지 도트작업을 해서 해당 색을 구분시켜줘야해서 작업이 너무 많아지고..

 

PictureBox를 이용해서 알파값을 제거해서 하는 방법으로 하니 이미지가 이동하는 속도가 안나오네요..

 

Graphics객체에서 ImageAttributes로 특적 컬러값을 제거하는것 말고 png이미지 파일의 알파값을 적용시키는 방법이 없을까요?
<답변내용>

안녕하세요 루나네스 입니다

그래픽 처리에서 알파블랜딩을 사용하면 무척이나 많은 리소스를 사용하게 됩니다
가급적이면 IImageFactory으로 PNG의 알파값 처리를 제외하시는 것이 좋습니다

개발 환경을 편하게 하기 위해서는 PNG의 알파값으로 알파블랜딩을 적용하는 것이 좋지만,
동작성능을 보장하기 위해서는 ImageAttributes를 이용하여 투명처리를 하시는 것이 좋습니다
(저도 이 방법을 사용하고 있습니다)

또 System.Windows.Forms.Timer를 이용해서 Interval을 1로 주셨다고 하셨는데, 타이머 컨트롤은 15~30ms 이하의 이벤트는 부정확하게 발생됩니다. (전에 제가 작성한 글과 소년포비님이 작성하신 글을 살펴보세요)
타이머는 주 스레드에서 구동되기 때문에 UI응답성에도 영향을 미치기 때문에,

가급적이면 System.Threading.Timer를 이용하시거나, Thread와 Delegate 처리를 통하여 작업하시는 것이
오버헤드 증가를 막고 원할한 동작성능을 유지할 수 있는 방법 입니다

UI Thread 사용을 위한 방법 : http://lunanesslab.tistory.com/117
타이머 관련 글 : http://lunanesslab.tistory.com/111
소년포비님 블로그 - 세가지 Timer 와 그 차이점 : http://blog.daum.net/starkcb/117

 작성일 : 2010.02.24

보다 자세한 정보는 윈도우 폰/모바일 개발자 모임에서 만나보실 수 있습니다