From 91c035aab08e631ab7592635ae945c4921cfc696 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Thu, 14 Sep 2023 19:47:08 -0700 Subject: [PATCH] add CMYK --- CMYK.zig | 29 +++++++++++++++++++++++++++++ mod.zig | 1 + sRGB.zig | 10 ++++++++++ 3 files changed, 40 insertions(+) create mode 100644 CMYK.zig diff --git a/CMYK.zig b/CMYK.zig new file mode 100644 index 0000000000000000000000000000000000000000..738c5dcc631d1c2c6abd6adf4382b4821838c67f --- /dev/null +++ b/CMYK.zig @@ -0,0 +1,29 @@ +//! object representing a single color in the CMYK colorspace with channel values from 0-1 + +const std = @import("std"); +const Self = @This(); + +c: f32, // cyan +m: f32, // magenta +y: f32, // yellow +k: f32, // black +a: f32, // alpha + +pub fn initCMYKA(c: f32, m: f32, y: f32, k: f32, a: f32) Self { + std.debug.assert(c >= 0.0 and c <= 1.0); + std.debug.assert(m >= 0.0 and m <= 1.0); + std.debug.assert(y >= 0.0 and y <= 1.0); + std.debug.assert(k >= 0.0 and k <= 1.0); + std.debug.assert(a >= 0.0 and a <= 1.0); + return Self{ + .c = c, + .m = m, + .y = y, + .k = k, + .a = a, + }; +} + +pub fn eql(x: Self, y: Self) bool { + return x.c == y.c and x.m == y.m and x.y == y.y and x.k == y.k and x.a == y.a; +} diff --git a/mod.zig b/mod.zig index 3068e2b407e22eb6c28394df90b3f90ffba82e36..0ec6c5ec197751f5b06dd8dee9af7de1fbe07c3c 100644 --- a/mod.zig +++ b/mod.zig @@ -3,3 +3,4 @@ const color = @This(); pub const sRGB = @import("./sRGB.zig"); pub const LinearRgb = @import("./LinearRgb.zig"); +pub const CMYK = @import("./CMYK.zig"); diff --git a/sRGB.zig b/sRGB.zig index 6d3a4ecaa53e0c449c3254ac4c3d9f5f25da1267..20b9cb019ad8591ccee5352062a45906b821a170 100644 --- a/sRGB.zig +++ b/sRGB.zig @@ -97,3 +97,13 @@ pub fn to_float(x: Self) Float { .a = @as(f32, @floatFromInt(x.a)) / 255.0, }; } + +pub fn to_cmyk(x: Self) color.CMYK { + const f = x.to_float(); + const k = 1 - @max(f.r, f.g, f.b); + const c = (1 - f.r - k) / (1 - k); + const m = (1 - f.g - k) / (1 - k); + const y = (1 - f.b - k) / (1 - k); + const a = f.a; + return color.CMYK.initCMYKA(c, m, y, k, a); +} -- 2.54.0