컴퓨터 모니터를 사용하면서 지나친 밝기로 인해 불편함을 느끼는 사용자들이 많다. 랩탑의 경우에는 자체적으로 밝기 조절을 기능을 대부분 제공하기 때문에 괜찮지만 데스크탑은 따로 프로그램을 설치하거나 원도우 10의 야간 모드 기능을 이용해야 한다. 글쓴이는 f.lux, dimscreen이라는 프로그램과 원도우 10의 야간 모드를 번갈아가면서 사용했지만 세가지 솔루션 모두 개인적으로 마음에 들지 않았다.
내가 원하는 밝기 조절 프로그램은 색감은 변경하지 않으면서 밝기만 조절을 원했는데 원도우 10의 야간 모드는 밝기 조절 프로그램이라기 보다는 시력 보호를 위해 색감을 변경해준다고 봐야 한다. 따라서 몇개월 쓰다가 사용을 중단했다.
f.lux의 경우에도 시력 보호를 위한 프로그램이지만 색감은 그대로 유지한채 밝기만 조절하는 기능을 제공한다. 그래서 이 프로그램을 몇년간 사용했는데 아주 큰 단점이 있다. 바로 내가 조절한 밝기 설정이 하루가 지나면 리셋이 된다는 것이다.
마지막으로 dimscreen은 내가 원하는 밝기 조절만 지원하고 단축키로도 제어가 되는 간단한 솔루션이지만 원도우 자동 시작 기능을 지원하지 않는 exe 파일 프로그램이므로 내가 수동으로 자동 시작 프로그램에 등록해줘야 하고 가장 큰 문제는 밝기 조절 영향이 원도우 프로그램의 메뉴부분에는 변경되지 않는다는 점이다.
이런 저런 프로그램을 써보면서 결국 얼마 전에 밝기 조절 프로그램을 자체 개발하기로 마음 먹었다. 모니터 제어를 하는 안정적인 API만 쓰면 금방 구현이 가능할 것 같아서 자료 조사를 해보니 다음과 같은 밝기 조절 솔루션이 있었고 이를 테스트 해보았다.
- DirectX Video Acceleration (DXVA) API(dxva2.dll) : SetMonitorBrightness 함수를 호출하는 방법. 모니터 핸들을 못찾거나 찾아서 밝기값 조절을 해도 적용되지 않았다. 하드웨어 가속 관련 API이기 때문에 비디오 드라이버의 설정값에 따라 효과가 적용안될 수도 있는등 제어가 까다로운 것 같아서 제외
- Windows graphics device interface (GDI) API(gdi32.dll) : SetDeviceGammaRamp를 호출하는 방법. 원도우의 기본 API 통해 감마값 조절. 별 이상없이 동작하지만 감마값 조절로는 원하는 만큼 밝기를 낮게 조절할 수 없어서 제외.
- Magnification API (Magnification.dll) : MagSetFullscreenColorEffect 함수를 호출하는 방법. 엄밀히 말해 모니터 밝기 조절을 위해 나온 API가 아니고 장애인등을 위한 시각화 보조를 위해 만들어진 API를 이용하는 방법이다.
이중 비교적 최근에 생긴 Magnification API를 사용해서 밝기를 조절하는 방법을 사용하기로 하였다. 테스트 해본 결과 그래픽카드에 종류와 상관없이 노트북과 PC에서 문제없이 동작하는 것을 확인할 수 있었다. 이 API를 기반으로 원도우 자동 시작과 단축키 제어를 구현하여 일주일정도 시간을 들여 개발을 완료 하였다. 다운로드 및 자세한 설명은 프로그램 소개 페이지를 참고 바란다.
