Мой полный пример преобразования C # между CMYK & lt; -> HEX:
public class ColorConverter
{
public static string CMYKtoHex(decimal[] cmyk)
{
if (cmyk.Length != 4) return null;
var r = (int)(255 * (1 - cmyk[0]) * (1 - cmyk[3]));
var g = (int)(255 * (1 - cmyk[1]) * (1 - cmyk[3]));
var b = (int)(255 * (1 - cmyk[2]) * (1 - cmyk[3]));
var hex = "#" + r.ToString("X2") + g.ToString("X2") + b.ToString("X2");
return hex;
}
public static decimal[] HexToCMYK(string hex)
{
decimal computedC = 0;
decimal computedM = 0;
decimal computedY = 0;
decimal computedK = 0;
hex = (hex[0] == '#') ? hex.Substring(1, 6) : hex;
if (hex.Length != 6)
{
return null;
}
decimal r = int.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber);
decimal g = int.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
decimal b = int.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber);
// BLACK
if (r == 0 && g == 0 && b == 0)
{
computedK = 1;
return new[] { 0, 0, 0, computedK };
}
computedC = 1 - (r / 255);
computedM = 1 - (g / 255);
computedY = 1 - (b / 255);
var minCMY = Math.Min(computedC, Math.Min(computedM, computedY));
computedC = (computedC - minCMY) / (1 - minCMY);
computedM = (computedM - minCMY) / (1 - minCMY);
computedY = (computedY - minCMY) / (1 - minCMY);
computedK = minCMY;
return new[] { computedC, computedM, computedY, computedK };
}
}
расширение N STEP или NeXTSTEP / Sun в зависимости от того, кого Вы спрашиваете.
Sun имел довольно большие инвестиции в OpenStep некоторое время. Прежде чем Sun ввел изображение большинство вещей в основу, даже при том, что это не было известно как основа тогда, был снабжен префиксом NX, для NeXT, и когда-то непосредственно перед тем, как Sun ввел изображение, в которое все было переименовано к NS. S, скорее всего, не обозначал Sun тогда, но после того, как Sun, ступивший в общее согласие, был то, что это выдержало за Sun соблюдать их участие.
у меня на самом деле была ссылка для этого, но я не могу найти его прямо сейчас. Я обновлю сообщение, если/когда я найду его снова.
Когда NeXT определяли NextStep API (в противоположность операционной системе NEXTSTEP), они использовали префикс NX, как в NXConstantString. Когда они писали спецификацию OpenStep с Sun (чтобы не быть перепутанным с операционной системой OPENSTEP), они использовали префикс NS, как в NSObject.
Исходный код для платформ Какао прибыл из библиотеки NeXTSTEP Основа, и AppKit (те имена все еще используются платформами Какао Apple), и инженеры NextStep приняли решение снабдить префиксом свои символы NS.
, поскольку Objective C является расширением C и таким образом не имеет пространств имен как в C++, символы должны быть снабжены префиксом уникальный префикс так, чтобы они не сталкивались. Это особенно важно для символов, определенных в платформе.
, Если Вы пишете приложение, такое, что Ваш код только вероятен когда-либо использовать Ваши символы, Вы не должны волноваться об этом. Но если Вы пишете платформу или библиотеку для использования других, необходимо также снабдить префиксом символы уникальный префикс. CocoaDev имеет страницу , где многие разработчики в сообществе Какао перечислили свои "выбранные" префиксы. Можно также найти это ТАК обсуждение полезный.
Это - NextStep (= NS) наследие. NeXT был компьютерной фирмой, которой был Steve Jobs, сформированный после того, как он вышел из Apple в 1985 и NextStep, это - операционная система (базирующийся UNIX) вместе с Obj-языком-C и временем выполнения. Вместе с он - библиотеки и инструменты, NextStep был позже переименован в OpenStep (который был также именем на API, который NeXT разработал вместе с Sun), который в свою очередь позже стал Какао.
Эти различные имена на самом деле довольно сбивают с толку (тем более, что некоторые имена отличаются только, в котором символы являются верхним регистром или нижним регистром..), попробуйте это за объяснение: