c# 使用 ICC 配置文件将 CMYK 颜色转换为 Cielab 或将 RGB 转换为 Cielab

问题描述 投票:0回答:3

我想在 C# 中使用 .icc 配置文件“ISOnewspaper26v4.icc”! 但我现在有一个问题..我不知道如何使用此 ICC 配置文件将 CMYK 颜色转换为 Lab 值或将 RGB 转换为 Lab 值??!!我如何分配配置文件?

c# colors rgb cmyk color-profile
3个回答
0
投票

据我所知,C# 和相关库不包含任何将 CMYK 或 RGB 转换为 Lab 的函数。包含将 CMYK 转换为 RGB 的函数(请参阅此 answer)。

Windows API似乎有不同颜色系统之间转换的功能。它至少适用于将 RGB 转换为 CMYK(请参阅此 answer)。

您可能需要以下扩展:

    [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 颜色。不过我还没试过。


0
投票

借助实验室空间 ICC 配置文件,应该可以“转换”为 CIE Lab。 AGFA 曾经有一个。否则,必须编写一个例程,在 ICM 之外通过 A2B0 标签手动进行转换,以获得输出配置文件。请注意,ISOnewspaperv4 配置文件非常有限。


0
投票

我的 Unicolor .NET 库 能够提供帮助,无需包装 Windows API 或 LitteCMS 函数。

以下是如何将其与

ISOnewspaper26v4.icc
ICC 配置文件一起使用的简单示例:

var isoNewspaper26v4 = new IccConfiguration("./ISOnewspaper26v4.icc", Intent.Perceptual);
var config = new Configuration(iccConfiguration: isoNewspaper26v4);

var magenta = new Unicolour(config, new Channels(0, 1, 0, 0.25)); // CMYK input
Console.WriteLine(magenta.Rgb); // 0.61 0.01 0.34
Console.WriteLine(magenta.Lab); // 33.58 +59.36 -3.47

(请注意,LAB 值默认为 D65,但可以轻松配置为 D50)

© www.soinside.com 2019 - 2024. All rights reserved.