in reply to Converting CMYK values to RGB values

Using the formulae from the page zigdon suggested ;
# 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; }

poj

Replies are listed 'Best First'.
Re: Re: Converting CMYK values to RGB values
by Arien (Pilgrim) on Dec 27, 2002 at 11:50 UTC

    Using map allows for code that is (IMHO) somewhat clearer and more concise.

    sub cmyk2rgb { my ($cyan, $magenta, $yellow, $black) = @_; my $white = 255 - $black; use integer; return map $_ > 255 ? 0 : 255 - $_ => map $_ * $white / 255 + $black => ($cyan, $magenta, $yellow); }

    — Arien