1 package Shiar_Sheet::Colour;
5 use List::Util qw( min max );
9 # ITU-R recommendation 601 luma co-efficients
12 our $kg = 1 - $kb - $kr;
16 my @rgb = @_ >= 3 ? @_ : (map {hex} $_[0] =~ /(..)/g);
21 # convert from YPbPr values 0..255 (or hex string)
23 my ($y, $cb, $cr) = @_ >= 3 ? @_ : (map {hex} $_[0] =~ /(..)/g);
25 $_ -= 128 for $cb, $cr;
26 $_ /= 255 for $y, $cb, $cr;
28 my @rgb = map { max(0, min(255, $_ * 255)) } (
30 $y - $cb * (1 - $kb) * $kb/$kg - $cr * $kr/$kg,
31 $y + $cb * (1 - $kb) ,
37 # perceived brightness
38 my ($r, $g, $b) = @{ $_[0] };
39 return $r*$kr + $g*$kg + $b*$kb;
44 $str .= sprintf '%X', min($_ / 17 + .5, 15) for @{ $_[0] };
50 $str .= sprintf '%02X', $_ for @{ $_[0] };