# see http://adaptiveview.com/cw/doc5a.html # red = 255 - minimum(255,((cyan/255) * (255 - black) + black)) # green = 255 - minimum(255,((magenta/255) * (255 - black) + black)) # blue = 255 - minimum(255,((yellow/255) * (255 - black) + black)) use strict; use warnings; # some test data my @cmyk = qw(0 128 255 127 ); # convert my @rgb = cmyk2rgb(@cmyk); # result foreach (0..2){ print "$_ $rgb[$_]\n"; } sub cmyk2rgb { my (@cmyk) = @_; my $bk = $cmyk[3]; my $wh = 255 - $bk; my @rgb=(); my $tmp=0; for (0..2){ $tmp = ( ($cmyk[$_]/255) * $wh ) + $bk; $tmp = ($tmp > 255) ? 255 : $tmp; $rgb[$_] = 255 - int ($tmp + 0.5); } return @rgb; }