Я хочу использовать профиль .icc "ISOnewspaper26v4.icc" в C #! Но теперь у меня проблема ... Я не знаю, как преобразовать цвета CMYK в значения Lab или RGB в значения Lab с помощью этого профиля ICC ?? !! Как мне назначить профиль ??
c # Преобразование цвета CMYK в Cielab или RGB в Cielab с использованием профиля ICC
Ответы (2)
Насколько мне известно, C # и связанные библиотеки не содержат функций для преобразования CMYK или RGB в Lab. Содержащиеся функции для преобразования CMYK в RGB (см. ответ).
Кажется, что в Windows API есть функции для преобразования между разными цветовыми системами. По крайней мере, он работает для преобразования RGB в CMYK (см. ответ).
Возможно, вам понадобятся следующие расширения:
[StructLayout(LayoutKind.Sequential)]
public struct LabCOLOR
{
public ushort L;
public ushort a;
public ushort b;
public ushort pad;
};
[DllImport("mscms.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
static extern bool TranslateColors(
IntPtr hColorTransform,
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2), In] RGBColor[] inputColors,
uint nColors,
ColorType ctInput,
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2), Out] LABColor[] outputColors,
ColorType ctOutput);
Затем вы сможете заменить «cmyk» на «lab», чтобы преобразовать цвета RGB в цвета Lab. Но я не пробовал.
Должна быть возможность «конвертировать» в CIE Lab с помощью профиля ICC Lab space. Раньше у AGFA был такой. В противном случае нужно было бы написать процедуру для ручного выполнения преобразования вне ICM через тег A2B0 для выходного профиля. Помните, что профиль ISOnewspaperv4 ненадежен.