본문 바로가기

내가 작업한 것들/소프트웨어

오픈소스 스크린샷 프로그램, FLSCRNSHOT 소개

일반 캡쳐, 윈도우 창 전체와, 주변일부까지 저장.

뭐 하는 프로그램인가?

 대부분의 윈도우 화면을 비손실 압축 ( 압축 레벨 7 ) PNG 로 자동 분류 해서 저장해 주는 프로그램 입니다. 기본으로 지정 해 둔 폴더 안에 현재 캡쳐 하는 윈도우의 "클래스이름[윈도우 제목]" 으로 폴더를 만들고 그 안에 년-월-일-시-분-초-밀리초.png 이름으로 파일을 계속 저장 해 주는 초간단 개편안 프로그램 정도 되겠습니다.

왜 만들었는가?

 이 프로그램을 만든 것은 스팀을 쓸 때 편리하던 F12 키 한번에 스크린샷이 저장 되던 편리함들을 에픽게임 런쳐나, 일반 게임들에선 그 기능을 윈도우 자체의 괴랄한 "게임 오버레이" 로만 가능하거나, 상용 프로그램 으로만 가능했기 때문 입니다. 특히 근래 즐기고 있는 "에디스 핀치의 유산" 게임 플레이 중, Ctrl 또는 Shift, 아님 Alt 등과 Window 키, 그리고 PrtScrn 키 까지 조합을 해서 화면을 캡쳐 하고 있노라면 화면에 줌이 되면서 원하는 화면이 안 나오는 일은 물론, 비디오 메모리 사용량이 계속 증가해서 오류가 나는 괴증상이 나타나는 등 ... 많은 빡침이 있어 이를 직접 만들게 되었습니다.

다운로드

 이 프로그램은 오픈소스로 아래 URL 에서 최신버젼을 내려 받으면 되는 형태 이며, 실행 파일 하나만 있으면 동작하는 형태의 프로그램 입니다. 어디서든 실행 하던, 설정은 시스템의 "%LOCALAPPDATA%\FLSCRNSHOT" 위치에 flscrnshot.cfg 파일을 하나 만든 다음 여기에 설정을 저장 해 두게 되며, 프로그램이 중복 실행이 되지 않으나, 어디서든 실행 되면 위의 설정 위치를 참조로 동작하게 설계되어 있습니다.

https://bitbucket.org/rageworx/flscrnshot/downloads/

프로그램에 대한 짧은 설명

프로그램이 화면을 캡쳐 하는 방법은 기본적으로 3가지의 형태이며, 보통 Client area only 를 사용해서 윈도우 안의 이미지만 사용하는 것을 권장 합니다. 각 캡쳐 되는 특징을 보면 아래 3장의 이미지 처럼 -

일반 캡쳐, 윈도우 창 전체와, 주변일부까지 저장.

Precision capture (정밀 캡쳐) 윈도우 자체만 캡쳐

Client area only : 윈도우 내부만 캡쳐

또한, 캡쳐가 되면 자동으로 이미지를 PNG 로 저장 하는데, 이때 "Copy to clipboard" 를 선택 해 두면 매번 크립보드에 해당 이미지가 복제되어 들어 가 있게 됩니다. 다만, 해상도가 높은 화면이나 게임을 할 때엔 그 화면 크기 만큼 계속 메모리를 사용하게 되므로 필요 한 경우에만 사용하시는 것을 권장 드립니다. 클립보드에 복제 되는 이미지는 실제 HBITMAP 이므로 압축되지 않은 이미지로서 메모리 사용량이 꽤 높습니다.

 Play capture sound 의 경우는 필름카메라의 셔터음을 사용하고 있는데, 게임을 하면서 캡쳐를 하면 프로그램이 별도로 뭔가 알려 주는 것이 없기 때문에 소리로서만 알려 주는 기능 입니다. 기본으로 켜져 있으나 필요에 따라 소리 재생을 끌 수 있습니다.

저장 방법에 대한 추가 설명

 Base path 라고 된 위치는 기본적으로 탐색기에서 "사진" 으로 표시되는 위치에 FLSCRNSHOT 이란 폴더를 만들고 이 안에 캡쳐되는 윈도우의 "클래스이름[윈도우창 이름]" 형태의 폴더를 또 만들고 그 안에 캡쳐 내용을 차곡차곡 쌓게 됩니다.

추가적으로 [...] 버튼을 눌러서 새로운 위치를 지정하면 그 뒤로 같은 형태로 이미지를 계속 저장하게 되며, 이때 주의점은 설정된 위치의 폴더가 갑자기 사라지거나, 이름이 바뀌거나 하면 저장을 하지 못합니다.

캡쳐 키 변경

 프로그램을 만들때 윈도우 처럼 특수키를 조합한 형태로 만들어야 하나? 했지만, 그 조합된 키가 짜증이 나서 이걸 만들었다는 걸 생각해 보니, 그냥 특수키 없이 특정 키 하나면 캡쳐가 되는걸 고수 했습니다. 보통 스팀 클라이언트를 쓰시는 분들은 F12 를 그대로 쓰면 되는걸 고려해서 기본으로 F12 를 쓰도록 했습니다. 키를 변경 하려면 [Select Key] 버튼을 눌러 새로운 캡쳐 키를 한번 눌러 주면 되나, 취소하시려면 ESC 키를 누르면 됩니다.


캡쳐 품질

 이 프로그램을 만든 이유중 하나가 BMP 나 JPG 가 아닌 PNG 로 이미지를 비손실 압축 하고 싶은 욕심이 있었기 때문이며, 압축효율 대비 속도 등을 고려 해서 압축률 7 을 지정해서 PNG 를 만들고 있습니다. (필요하시면 소스를 직접 clone 해서 이를 수정해서 직접 만들어 써도 됩니다)

 그래서 근래 즐기고 있는 "에디스 핀치의 유산" 일부 캡쳐를 올립니다.

 덤으로 게임을 진행 하다 보니, 플레이하는 주인공의 독백이 누군가에게 말을 하듯 이어지는걸 이제서야 깨달았습니다. 그러고 보니 게임 초반에 깁스를 한 손과, 지금 스토리상의 진행하는 캐릭터는 전혀 다른 사람이란 것을 알게 되어 가는점에 살짝 소름이 돋았습니다. 과연 이 저주받은 집안의 결말은 어떻게 되는 건지 ... 집안에서 혼자 남은 사람으로서의 감정은 매우 복잡해 질 수 밖에 없을텐데 .. 과연 이 이야기는 누구에게 하는 것이며, 그 대상이 초반에 깁스를 한 누군가인지 .. 등등, 많은 생각을 하게 해 주는 게임이 아닌가 합니다.


오픈소스 참여

 이 프로그램은 제가 필요에 의해 간단히 만든 프로그램으로서, 상용 프로그램 처럼 다양한 기능을 만들지 않고 개인 취향에 맞춰져 있는 부분이 많습니다. 그런 이유로 해당 기능을 개선하시고자 하시는 분들은 해당 소스를 개선, 참여 하실 수 있습니다. 또는 버그리포트를 해서 제가 직접 소스를 개선하도록 참여도 가능하니, 관심 있으신 분들이 계시면 먼저 감사 드리고자 합니다.


기타 ...

 처음엔 DirectX 의 backbuffer 를 써서 캡쳐를 따로 해야 하는가? 하는 몇몇 프로그램들이 있긴 했습니다만, 이걸 개인적으로 잘못 쓰면 윈도우 자체 캡쳐 처럼 비디오 메모리 사용량이 이상하게 계속 증가하는 이상한 증세를 동일하게 발생 시키는걸 발견 했습니다. 그래서 고전적이면서도 가장 안전한 방법인 DC를 통해 HBITMAP 을 얻고, 내부에 Dibits 를 얻어와서 처리하는 방법을 고수하게 되었는데, 이게 가장 효율적이기도 했습니다. 혹시 다른 방법에 대해 아신다면 bitbucket Issue 부분에 남겨 주시면 적용해 보도록 하겠습니다.

 그리고 기능이 한글을 굳이 써야 할 수준은 아니라 UI를 한글로 만드는 경우는 없을 것으로 보입니다.