303e37556c5825d2712652378e5a4f694023a203
[sheet.git] / Shiar_Sheet / Colour.pm
1 package Shiar_Sheet::Colour;
2
3 use strict;
4 use warnings;
5 use List::Util 'min';
6
7 our $VERSION = '1.00';
8
9 # ITU-R recommendation 601 luma co-efficients
10 our $kr = .299;
11 our $kb = .114;
12 our $kg = 1 - $kb - $kr;
13
14 sub new {
15         my $class = shift;
16         my @rgb = @_ >= 3 ? @_ : (map {hex} $_[0] =~ /(..)/g);
17         bless \@rgb, $class;
18 }
19
20 sub luminance {
21         # perceived brightness
22         my ($r, $g, $b) = @{ $_[0] };
23         return $r*$kr + $g*$kg + $b*$kb;
24 }
25
26 sub rgb24 {
27         my $str = '';
28         $str .= sprintf '%X', min($_ / 17 + .5, 15) for @{ $_[0] };
29         return $str;
30 }
31
32 sub rgb48 {
33         my $str = '';
34         $str .= sprintf '%02X', $_ for @{ $_[0] };
35         return $str;
36 }
37
38 1;
39