Значения цвета CMYK к его целочисленному эквиваленту

У меня есть значения цвета CMYK (0, 0,58, 1, 0). Теперь мне нужно преобразовать его в целочисленный эквивалент с помощью C#. Я думаю, что это возможно с помощью побитового оператора, но не уверен.

Пожалуйста, помогите мне, как можно добиться того же.

Спасибо, Паван


person user1641519    schedule 02.09.2012    source источник
comment
Если вы хотите преобразовать их только в int, вы можете использовать метод Convert.ToInt32. Но это заставит вас потерять точность. Возможно, вы думали о преобразовании их в цветовое пространство RGB?   -  person Legoless    schedule 02.09.2012
comment
@Legoless нет, я думаю, что понял, чего хотел ОП, смотрите мой ответ.   -  person    schedule 02.09.2012


Ответы (1)


Попробуй это:

float c = 0.0;
float y = 0.58;
float m = 1.0;
float k = 0.0;

uint intColor = (uint)(c * 255) << 24;
intColor += (uint)(y * 255) << 16;
intColor += (uint)(m * 255) << 8;
intColor += (uint)(k * 255) << 0;

Здесь intColor будет 32-битным целым числом без знака, содержащим байтовое значение компонентов цвета C, Y, M и K соответственно. Чтобы преобразовать обратно в компоненты из целого числа, просто инвертируйте все операции и их порядок:

float c = ((intColor & 0xFF000000) >> 24) / 255.0f;
float y = ((intColor & 0x00FF0000) >> 16) / 255.0f;
float m = ((intColor & 0x0000FF00) >> 8) / 255.0f;
float k = ((intColor & 0x000000FF) >> 0) / 255.0f;
person Community    schedule 02.09.2012
comment
Спасибо ... Можете ли вы сказать мне, как преобразовать обратно из int в эквивалент CMYK? - person user1641519; 04.09.2012
comment
@userXXX, ты постоянно упоминаешь этот «эквивалент»… Но что это? Чего именно ты хочешь? - person ; 04.09.2012
comment
Привет. Предположим, у меня есть значения цвета CMYK (0, 0,58, 1, 0). Теперь мне нужно преобразовать его в Int, а затем мне придется перейти от значений Int к значениям CMYK. Здесь я хочу обратное преобразование из CMYK в Int и наоборот. CMYK представляет значения цвета, поэтому int также должен представлять эквивалентное значение цвета. да хочу именно. - person user1641519; 04.09.2012
comment
Кроме того, в приведенном выше коде (для преобразования из CMYK в int) OutPut сохраняется как Uint... это правильно... пожалуйста, помогите мне. - person user1641519; 04.09.2012
comment
@userXXX Понятно. Кроме того, я редко пишу неправильные ответы. На самом деле концептуально лучше использовать UInt — побитовые операции более безопасны, а цветовая составляющая не может быть отрицательной. - person ; 04.09.2012
comment
зачем работать с /255 или /256? CMYK - это проценты (2 десятичных знака?) - person nl-x; 14.01.2014