libpng로 png를 화면에 출력했는데 색이 이상해요

doraq의 이미지

환경 : XP home + cygwin + gcc
프레임버퍼에 해당하는건 win32api로 구현.
(이 형태가 효율적이지 않은건 압니다만 실제 동작 환경을 윈도에서 에물레이션 해주는 환경을 만드는거라서요)

작은 여러개를 했을땐 한개만 색이 맞고 나머진 다 이상했습니다.
한개만 하면 괜찮을까 싶어 한개만 올려도 이상하더군요.
파일을 읽을때 주는 옵션을 여러가지로 바꿔봐도 더 이상할뿐인거예요
그런데 libpng는 파일을 읽고 다시 파일로 쓰는거만 있고
출력에 관계된게 없더군요.
그래서 단순히 읽어낸 압축풀린 메모리를 프레임버퍼에 써줬거든요.
그런데 색이 이상한거예요. 노란색이 빠진듯하다랄까..
24비트 그림/32비트 그림 모두 다 해봤구요.
24비트일때의 blt처리도 나름대로 해 줘봤고 ARGB, RGBA 다 해봤지만 다를거 없네요.
색을 출력하는(점을 찍는)거 자체가 이상한건 아녜요.
특정좌표에 0xFF0000 하면 RED가 정확히 찍히거든요

질문(두갭니다)
1. 왜 색이 이상한지 모르겠구요.
2. 그림에 표현한 도트레벨의 알파값을 적용해서 화면에 표현하려면 일일이 지금화면 그림과 버퍼의 그림을 알파값비율에 따라 계산해서 or 연산을 한 결과를 write해야 하는건가요?
(IE에서 레이어를 투명하게 하는거 봤는데 IE도 이런식으로 한걸까요? 아님 VGA쪽 하드웨어가 기능이 있으면 처리를 맏기는 걸까요?)

doraq의 이미지

더 이상 참조할 문서가 없어 PNG스펙을 보니 viewing에대해 나오더군요.
위 질문에서와 같이 블렌딩할 두 점의 RGB값을 각각 FG/BG의 A값의 비율대로 연산하는거 맞더군요.
다만 스펙엔 제가 무시했던 gamma correction 연산이 더 추가되있었는데 이건 옵션적인거니 무시해도 상관없구요.

색이 이상하게 나오는건 아직 원인은 모르지만 코딩에 어딘가 문제가 있겠죠 뭐.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.