2009/05/16 08:14
꽤 옛날부터 만들려 했던 프로그램인 그림판을 이번에야 말로 끝을 내기 위해 다시 작업을 시작했다. 중간에 코드를 잊어버렸다던가, 바쁘다는 이유로 버려두던가, 구조가 마음에 안든다는 이유로 엎어버리기도 했었지만, 나중이 되면 미련이 남아 다시 코드를 끄적이고 있어서일까... 이번에야말로 끝을 보기 위해 정리를 하면서 작업을 하기로 했다.
요구사항과 현재 진행하고 있는 작업은 다음과 같다.
유저 인터페이스를 위해 필요한 작업을 나열해 보면 다음과 같다.

요구사항과 현재 진행하고 있는 작업은 다음과 같다.
- 네트워크 상에서 작업을 할 수 있어야한다.
서버와 클라이언트로 역할을 나누고, 이에 따라 Boost::Asio기반의 RPC 라이브러리를 만들어 통신 할 수 있게 구현해 두었고, 이후 실제 서버와 클라이언트의 역할 수행에 대한 구현이 필요하다.
- 이벤트 정보를 파일에 기록하였다 재생할 수 있다.
이벤트에 대한 부분을 Command Pattern을 적용하여 이미지에 대한 이벤트와 발생 시간에 대한 정보를 파일에 기록하였다 재생하는 방법으로 구현하려고 설계만 해 두었다.
- 간단한 이미지 연산이 들어가야한다.
Boost::GIL을 기본 이미지 라이브러리로 해서 간단한 사칙연산에 해당하는 연산과, 알파블렌딩에 대한 부분을 구현해 두었다.
- 타블렛을 지원해야한다.
Wintab32.dll을 읽어들여 타블렛의 압력과 위치에 대한 이벤트를 받아 들일 수 있게 해 두었다.
- 크기가 되도록이면 작아야 한다.
MFC보다는 WTL을 사용하였다. 이 선택에는 WTL은 VC Express에서도 사용할 수 있다라는 점이 크게 작용하였다.
- 비교적 빠른 속도로 이미지를 처리할 수 있어야한다.
빠른 속도를 위해 Threading Building Block을 사용해 보았다. 실제로 많은 레이어에 대해 작업을 할 경우 체감할 수 있을정도의 성능향상을 확인하였다.
- 레이어를 지원해야한다.
알파블렌딩과 기본 연산들의 조합을 통해 구현했다.
- 브러쉬를 간단한 스크립트와 이미지로 만들 수 있어야한다.
준비중.
유저 인터페이스를 위해 필요한 작업을 나열해 보면 다음과 같다.
- 팔레트 구현
- 레이어 관리 윈도우
- 메뉴
- 네트워크 관련 메뉴
- 채팅 관련 메뉴
- 브러쉬 관련 메뉴
- 채팅을 위한 기본적인 기능들
- 이미지 편집에 대한 이벤트의 처리
- 작업중 들어온 사람에 대한 처리
- 자원에 대해 잠금기능 구현
- 유저에 대한 권한 설정 기능
- 다른 이미지나 클립보드상에서 이미지를 가져 와서 붙였을때의 처리 방법
'etc > 미분류' 카테고리의 다른 글
| 네트워크 기반 그림판 제작 - rev 81 (0) | 2009/05/16 |
|---|---|
| Boost 1.35.0가 공개 되었다. (1) | 2008/03/31 |
TAG

댓글을 달아 주세요