16 비트 루미넌스 값을 2 바이트로 저장하고 이것을 R, G, B 값으로 변환하고 싶습니다. 두 가지 질문이 있습니다 : 어떻게 그 두 바이트를 짧게 변환하고 색조와 채도가 0이라고 가정하면이 단락을 구성 요소 RGB 값당 8 비트로 변환하는 방법은 무엇입니까? 16 비트 루미넌스 값을 32 비트 RGB로 변환
(변환] 클래스는 두 바이트 및 출력 단락을 할 수있는 옵션이 없습니다.)답변
16 비트 값이 리틀 엔디안이고 부호가없는 경우 2 번째 바이트는 RGB 값을 만들기 위해 3x를 반복하고 다른 바이트는 드롭합니다. 또는 RGB를 32 비트 정수로 사용하려면 비트 시프트를 사용하거나 두 번째 바이트에 0x10101을 더하거나 곱하면됩니다.
이 같은 시도 :
byte luminance_upper = 23;
byte luminance_lower = 57;
int luminance = ((int)luminance_upper << 8) | (int)luminance_lower;
당신에게 65535 사이의 값을 줄 것이다 .
물론 32 비트 ARGB (그레이 스케일) 컬러로 끝내고 싶다면 16 비트 휘도에서 8 비트 R로 이동하기 때문에 하위 바이트는 중요하지 않습니다. , G, B 구성 요소.
byte luminance_upper = 255;
// assuming ARGB format
uint argb = (255u << 24) // alpha = 255
| ((uint)luminance_upper << 16) // red
| ((uint)luminance_upper << 8) // green
| (uint)luminance_upper; // blue (hope my endianess is correct)
상황에 따라 더 나은 방법이있을 수 있습니다. 예를 들어 위의 코드는 선형 매핑을 수행하지만 로그 곡선을 사용하여 16 비트 값을 8 비트 RGB 구성 요소에 매핑하면 더 나은 결과를 얻을 수 있습니다.
"32 비트 그레이 스케일 번호"는 "알파, R, G, B를 의미하며 각 비트는 8 비트이고 R = G = B입니다." – Crashworks
네, 조금 더 명확 해지기를 바랍니다. – geofftnz
다른 구성 요소 (색조 및 채도)도 필요합니다.
또한 16 비트 사운드가 약간 이상합니다. 일반적으로이 값은 부동 소수점입니다.
많은 색상 공간의 변환을 위해 CodeProject에 아주 좋은 기사가 있습니다.
- 1. 해시 32 비트 정수를 16 비트 정수로 변환 하시겠습니까?
- 2. 32 비트 16 진수의 첫 번째 16 비트
- 3. 32 비트 dll에서 64 비트 dll로 변환
- 4. PHP : 두 개의 16 비트 정수를 32 비트 정수로 결합
- 5. 16 비트 비트 심도
- 6. nasm과 32 비트 및 16 비트 코드 믹싱
- 7. 16 비트를 사용하여 32 비트 값에서 비트 시프트 구현
- 8. 아래쪽 16 비트 지우기
- 9. 32 비트 64 비트 호환
- 10. 32 비트/64 비트 OS?
- 11. 32 비트 MSI : 64 비트 응용 프로그램의 단축 경로 대상 경로를 32 비트 경로로 변환
- 12. 유니 코드 (16 비트) 데이터를 7 비트 ASCII로 변환
- 13. 16 비트 심도 CvMat *를 8 비트 깊이로 변환
- 14. Windows에서 32 비트 오디오?
- 15. 64 비트 컴퓨터에서 32 비트 DLL 사용
- 16. 16 비트 PCM 값을 -1 대 1 값으로 변환
- 17. 32 비트 정수에서 비트 단위 조작
- 18. 64 비트 16 진수 기지로 10 변환
- 19. MFC 비트 시프트가 32 비트 이상
- 20. 32 비트 .def 파일을 64 비트로 변환
- 21. imagegif 함수의 경우 16 진수를 RGB로 변환
- 22. 16 진수로 비트 전환
- 23. 32 비트 윈도우 아래의 64 비트 레지스터
- 24. 32 비트 및 64 비트 ASP.NET 배포
- 25. 64 비트 어셈블리의 32 비트 명령어들
- 26. 32 비트/64 비트 시스템에 관한 질문
- 27. Office의 32 비트 DLL 64 비트
- 28. 64 비트 Weblogic 서버의 32 비트 JDK
- 29. * .WAR (64 비트 x 32 비트) 생성
- 30. 64 비트 Solaris에서 32 비트 포인터로 컴파일
그게 바로 제가 고마워해야 할 일입니다! – RCIX