2011-06-15 4 views
0

저는 텍스처 이미지 파일을 읽고 .png로 변환하고 저장하는 C++ 프로그램을 작성하고 있습니다.A16B16G16R16F을 ARGB32로 변환하는 방법?

ARGB 절반 정밀도 부동 소수점 픽셀 형식을 만났습니다.

는 I 내가 하프의 유효 범위 무엇 모르겠습니다 (

  1. 프리미티브 플로트
  2. 곱하기 255 1 c를 32 비트 16 개 비트를
  3. 변환 읽기 화소 ARGB 채널에 대해 시도 float 값) 바이트 값

하지만 눈에 보이는 이미지를 가져올 수 없습니다에

  • 캐스트. 변환 방법이 잘못되었을 수 있습니다.

    반 정밀도 부동 소수점을 8 비트 색상 명도 값으로 변환하는 공식은 무엇입니까? 독서 반 수레의

  • +1

    당신은 그것이 'unsigned short int'가 아닌 반 플로우라고 확신합니까? –

    +0

    @VJo 텍스처 포맷의 이름은 F로 끝나서 반올림됩니다. 그 반 플로트 형식은 GPU마다 다릅니다. –

    +0

    @ 재퍼 오른쪽,하지만 정확히 "텍스처 이미지 파일"에 대한 반 플로트는 무엇입니까? 내가 아는 한 그것이 존재하지 않는다. 셰이더에 대해 이야기하고 싶다면 하프 플로트에 대해 말할 수 있습니다. –

    답변

    1

    세부 사항은 여기에 블로그 게시물에 코드를 포함 설명 : 당신의 수레에 읽은 후에

    http://fpmurphy.blogspot.com/2008/12/half-precision-floating-point-format_14.html

    당신은 당신에게 값을 얻기 위해 톤 매핑 작업을 수행해야합니다 0..255 범위가 PNG를 허용했습니다. 이 작업을 "톤 매핑"이라고하며이를 수행 할 수있는 다양한 옵션이 있습니다. 아주 간단한 방법은 이미지에서 최대 값을 찾으려면 M 그리고 255/M으로 모든 픽셀의 밝기를 원하는 범위로 조정하십시오. 그래도 꽤 많은 알고리즘이 있습니다.

    이미지 원본에 따라 이미지를 작성하기 전에 감마 보정을 적용 할 수도 있습니다. 어쨌든 float 값으로 작업해야하기 때문에 float을 사용하여 모든 계산을 수행하고 밴딩과 같은 이미지 품질 문제를 피하기 위해 float-> byte conversion을 마지막 단계로 수행하는 것이 좋습니다.

    관련 문제