QT에서 일부 GDI + 기능을 구현해야합니다 (특히 LinearGradientBrush). 문제가있는 유일한 방법은 SetGammaCorrection입니다. MSDN에는 GDI + 감마 보정 알고리즘에 대한 철저한 설명이 있지만 그 항목을 찾을 수 없다는 주제를 발견했습니다.QT에서 GDI + 감마 보정 시뮬레이션
1)는 2 색 보간 간단한 LinearGradientBrush가 있다고 가정
I는 다음과 같이 감마 보정을 시뮬레이션하는 것을 시도했다. 이 두 색상 사이의 간격을 각 점 사이의 거리가 같은 사전 정의 된 수 (100)로 나눕니다.2) 각 지점에 값을 지정하십시오.
current_color = start_color * (1 - current_point_value) + end_color * current_point_value;
가 : 0.01, ..., 마지막 점 1.
3의 값을 갖는 것)의 각 점에서의 보간 된 컬러 값을 계산 - 첫 번째 포인트는 제 0의 값을 가질 것이다 시작 색상과 종료 색상은 명확하지 않은 경우 그래디언트 경계 색상입니다.
4) 개의 색의 경계를 제외한 각각의 계산 된 컬러 값 (실제의 감마 보정을 수행) : 감마
gamma_corrected_color_value = color_value^(1/gamma);
값은 2.2이다.
QLinearGradient를 가져 와서 계산 된 색상 및 위치 (포인트 값)로 그라디언트 스톱의 배열을 만들고 그 스톱을 그라디언트에 할당하고 마지막으로이 그라디언트로 QBrush를 만듭니다.
이제이 브러시로 직사각형을 채우면 실제 GDI + LinearGradientBrush의 결과에 매우 가깝지 만 결과는 동일하지 않습니다. 감마 값과 세그먼트 수의 다른 조합을 시도했지만 거의 동일한 그래디언트를 얻을 수 없었습니다.
GDI +에서 감마 보정을 구현하는 방법이나 QT에서 시뮬레이트하는 방법을 아는 사람이 있습니까?
고마워, 토니.
결과가 얼마나 떨어져 있었습니까? 마이크로 소프트는 sRGB의 창시자 중 하나입니다. 아마도 그들은 직선적 인 감마 함수 대신 그 공식을 사용했을 것입니다. –