Например, серый цвет будет совсем не виден, а общая яркость слишком высока
< pre class="lang-cs Prettyprint-override">
Код: Выделить всё
float[,] matrix = {
{ 1.660491f, -0.587641f, -0.072850f },
{ -0.124550f, 1.132900f, -0.008349f },
{ -0.018151f, -0.100579f, 1.118730f },
}
float Linear(float value) {
return value > 0) & 0x3FF);
int g = (int)((value >> 10) & 0x3FF);
int b = (int)((value >> 20) & 0x3FF);
float linearR = Linear(r /1023f);
float linearG = Linear(g / 1023f);
float linearB = Linear(b / 1023f);
float bt2020R = matrix[0, 0] * linearR + matrix[0, 1] * linearG + matrix[0, 2] * linearB;
float bt2020G = matrix[1, 0] * linearR + matrix[1, 1] * linearG + matrix[1, 2] * linearB;
float bt2020B = matrix[2, 0] * linearR + matrix[2, 1] * linearG + matrix[2, 2] * linearB;
bt2020R =(float) Math.Clamp(bt2020R*254, 0, 255);
bt2020G =(float) Math.Clamp(bt2020G*254, 0, 255);
bt2020B =(float) Math.Clamp(bt2020B*254, 0, 255);
var d = outputDesc.MaxLuminance;
re[index*4]= (byte)Math.Round(bt2020R );
re[index*4+1]= (byte)Math.Round(bt2020G);
re[index*4+2] = (byte)Math.Round(bt2020B );
int a = (int)((value >> 30) & 0x3);
re[index*4+3] = (byte)(a);
нормальный

но в моем коде

Подробнее здесь: https://stackoverflow.com/questions/791 ... r-r8g8b8a8