0006 클립보드의 PNG 디코딩
From 카카오톡 on Wine
Jump to navigationJump to search
0003이 다루는 것은 Firefox와 GTK가 내놓는 것까지이고,
image/png 하나만 내놓는 GNOME 스크린샷은 여전히 붙지
않았습니다.
디코딩을 드라이버에서 하는 것은 더 나은 자리가 없기 때문입니다.
CF_DIB을 CF_BITMAP으로 바꾸는 포맷 합성은 서버에 있으면서 내장 포맷 ID만 아는데, "PNG"는
실행 중에 등록되는 포맷이라 애초에 거기 들어갈 수가 없습니다.
결정한 것들
- 알파는 흰색 위에 합성합니다
- DIB에는 모두가 합의한 알파 채널이 없습니다. 32비트의 최상위 바이트는 예약된 자리이고 앱마다 해석이 달라서, 그대로 두면 모서리가 둥근 스크린샷이 검은 배경 위에 붙어 망가져 보입니다. 그런 화면을 보고 클립보드를 의심하기란 쉽지 않습니다.
image/png이CF_DIB이 됩니다- 전에는 "PNG"라는 등록 포맷이었고, 그 이름을 찾는 것은 없습니다.
- 인코더는 없습니다
- 있을 필요도 없습니다. 클립보드 포맷 하나는 표에서 처음 만나는 mime 하나로만 나가는데,
CF_DIB에게 그것은image/bmp입니다.
업스트림에 못 내는 이유
-lpng16을 Makefile.in에 직접 박아 넣었는데,
업스트림에 낼 판이라면 이렇게 쓰지 않을 것입니다. Wine의 configure가 PE
쪽 libpng(PNG_PE_LIBS)만 찾기 때문에, 제대로 하려면 유닉스
쪽 검사를 먼저 추가해야 합니다.