서체 관련 삽질 개발 #1

흠 예전에 MS Office 2011 for mac 한글 서체 호환성 문제란 글을 쓰면서 Apple Font Tool을 사용해서 name field를 업데이트 하는 방법을 소개했었는데…
지금 다시 읽어보면, 따라하기 어렵다는 코멘트가 굉장히 많다. 사실 난 unix command line에 익숙한데다가 개발자라 나름 열심히 설명했다고 생각했는데, Mac에서 터미널을 띄우는 것에 익숙하지 않은 사람들에게는 이게 쉽게 다가갈만한 무언가는 아니었던 것 같다. (사실 xml 수정하는 것도 쉬운 일은 아닌 듯.)
사실 생각해보면 Mac에서 LOL 한국 서버에 접속하기 같은 케이스만 봐도, plist 파일인지 뭔지 막 수정해서 돌리려니 여간 번거롭고 짜증나는 일이 아닐 수 없었다. 그런데 어떤 현자님께서 원클릭 솔루션을 만들어주신 덕에 이후로는 편하게 LOL을 할 수 있게 됐다.
어쨌든 맑은 고딕 외의 서체에도 비슷한 문제가 있을터이므로! 이를 우아하게 해결할 수 있도록 도우려면, 범용 frontend를 만들어 제공하는 게 답일 것 같다. (물론 fonttool은 깔려있어야 한다!)
Continue reading 서체 관련 삽질 개발 #1

Realtime 처리…

요새 별의 별 이상한 짓을 다 하고 있다보니 실시간으로 동영상을 저장해야할 필요가 생겼다. 그런데 MFC의 타이머는 message 기반이다보니 기본 타이머에 의존해서는 내가 원하는 것을 처리할 수 없을 것 같았다.

물론 MS 개발자들은 아주 똑똑하다보니 이런 경우를 위해 Multimedia timer라는 것을 제공하고 있다.

MFC에서 Multimedia timer 사용하기

우선 Multimedia timer에서 보장하는 resolution은 1ms까지이다. 그거보다 더 정밀하게 무언가를 처리해야한다면 multimedia timer를 사용하면 안된다.

우선 Multimedia timer를 시작/종료 하는 함수는 다음과 같다.
Continue reading Realtime 처리…

ICU의 charset detector…

얼마전 kldp에서 제가 남겼던 코멘트들을 트래킹하는 도중! ICUcharset detector가 포함되었단 소식을 듣게 되었습니다.
이 소식을 듣고 불이나게 ICU 문서를 뒤져봤지만, 문서가 굉장히 불친절하네요. -_-a
어쨌거나 IBM에서 만든 라이브러리 답게 C, C++, java 인터페이스를 모두 제공하고 있고, PHP에서도 intl 라이브러리를 통해 활용이 가능합니다만 아직 charset detector까지는 지원하고 있지 않습니다.
Continue reading ICU의 charset detector…

CG: dithering

팩스에서 처럼 이미지를 흑/백 으로만 표현할 수 있는 경우에도 어느 정도의 명암을 표현하기 위한 방법으로 아래와 같은 오리지널 이미지가 있을 때…

한 픽셀 값은 0~255 사이의 값을 가진다고 하고, 128 이상의 값은 하얀 색으로, 128 미만 값은 검은 색으로 표현하면 결과는 다음과 같다.

보다시피 디테일은 거의 사라져버리기 때문에 이런 것을 피하기 위해 디더링이란 기법을 사용하곤 한다. 수식으로 이를 표현해보자면 다음과 같고…

말로 설명하자면 랜덤 값을 더해준 뒤 128 을 기준으로 Thresholding 을 한다! 정도로 표현이 가능할 듯… 이론적으론 매우 간단하지만 효과는 확실하다. -16~16 의 랜덤 값을 이용하여 dithering 한 결과는 다음과 같다.

-32~32 사이의 랜덤 값을 이용할 경우는…

확실히 좀 디테일이 조금 생겨나는 것을 확인할 수가 있다. 장비들이 좋아지면서 이런 식의 트릭들에 대한 연구는 사라져가는 것 같다. -_ㅠ
위 테스트에 사용한 코드:

내 첫 cocoa application: yuv player

저번 주에 개인적으로 de-interlacing 관련된 발표를 준비하느라 논문에 있는 de-interlacing 기법들을 구현해서 실험을 했었는데, 맥에서 돌아가는 yuv player 를 못찾는 바람에 결과는 윈도우로 옮겨서 확인해야하는 불편이 있었다.
랩에 이미 충분히 쓸만한 yuvplayer 가 있기는 하지만 윈도우 전용이고, 내가 예전 신입생 과제를 하면서 만들었던 플레이어 역시 윈도우용;; 뭐 하튼 플레이어를 구현하는데 필요한 기반 테크닉은 다 갖추고 있었기 때문에 MFC + OpenGL 로 구현해봤던 것을 똑같이 Cocoa+OpenGL 로 구현해봤다.

메뉴를 이용해서 size 와 color format, frame rate 등을 준비할 수 있도록 만들었는데, size 와 frame rate 를 사용자가 직접 입력하는 것은 귀찮은 관계로 나중에 -_-;;
뭐 하튼 Zoom 하고 Drag And Drop 과 관련된 코드만 추가하고 나면 내가 구현하고 싶었던 모든 기능이 다 들어가는 거 같다. (Zoom 이야 glPixelZoom 을 사용하면 한방에 오케이니 흐흣)
XCode + Interface Builder 를 이용한 첫 결과물인데, 굉장히 오래전에 이미 나와있던 프로그래밍 인터페이스인데도 불구하고 굉장히 편리하게 프로그래밍이 가능해서 감탄을 해버렸다. 물론 MS 진영도 Visual Studio 2005 로 오면서 편리한 기능들이 꽤 많이 추가되긴 했지만, GUI Application 을 만들기 위한 IDE 로는 XCode + 인터페이스 빌더 쪽이 한 수 위인 듯…
MFC 나 Cocoa 나 진입 장벽이 꽤 높지만… 기본적인 테크닉을 익히고 나면 굉장히 강력하게 사용이 가능한 것 같다. 그리고 C 에 능숙하다면 다른 언어를 접하는 데도 그리 큰 어려움을 느끼지 않는 것 같다. 학부 시절 C++, Java 등에 눈길을 뺐기지 않고 주력 언어로 C 를 선택했던 게 탁월한 선택이었던 듯…
p.s) 코드를 좀 정리하고 sourceforge 등에 자리를 틀어볼까 싶네요. 🙂