libpng로 png를 화면에 출력했는데 색이 이상해요
글쓴이: doraq / 작성시간: 수, 2005/04/20 - 11:21오전
환경 : XP home + cygwin + gcc
프레임버퍼에 해당하는건 win32api로 구현.
(이 형태가 효율적이지 않은건 압니다만 실제 동작 환경을 윈도에서 에물레이션 해주는 환경을 만드는거라서요)
작은 여러개를 했을땐 한개만 색이 맞고 나머진 다 이상했습니다.
한개만 하면 괜찮을까 싶어 한개만 올려도 이상하더군요.
파일을 읽을때 주는 옵션을 여러가지로 바꿔봐도 더 이상할뿐인거예요
그런데 libpng는 파일을 읽고 다시 파일로 쓰는거만 있고
출력에 관계된게 없더군요.
그래서 단순히 읽어낸 압축풀린 메모리를 프레임버퍼에 써줬거든요.
그런데 색이 이상한거예요. 노란색이 빠진듯하다랄까..
24비트 그림/32비트 그림 모두 다 해봤구요.
24비트일때의 blt처리도 나름대로 해 줘봤고 ARGB, RGBA 다 해봤지만 다를거 없네요.
색을 출력하는(점을 찍는)거 자체가 이상한건 아녜요.
특정좌표에 0xFF0000 하면 RED가 정확히 찍히거든요
질문(두갭니다)
1. 왜 색이 이상한지 모르겠구요.
2. 그림에 표현한 도트레벨의 알파값을 적용해서 화면에 표현하려면 일일이 지금화면 그림과 버퍼의 그림을 알파값비율에 따라 계산해서 or 연산을 한 결과를 write해야 하는건가요?
(IE에서 레이어를 투명하게 하는거 봤는데 IE도 이런식으로 한걸까요? 아님 VGA쪽 하드웨어가 기능이 있으면 처리를 맏기는 걸까요?)
Forums:
알파 블렌딩관련 질문은 그 방식이 맞습니다.
더 이상 참조할 문서가 없어 PNG스펙을 보니 viewing에대해 나오더군요.
위 질문에서와 같이 블렌딩할 두 점의 RGB값을 각각 FG/BG의 A값의 비율대로 연산하는거 맞더군요.
다만 스펙엔 제가 무시했던 gamma correction 연산이 더 추가되있었는데 이건 옵션적인거니 무시해도 상관없구요.
색이 이상하게 나오는건 아직 원인은 모르지만 코딩에 어딘가 문제가 있겠죠 뭐.
댓글 달기