termcol: colour class to facilitate calculation and formatting
[sheet.git] / Shiar_Sheet / Colour.pm
diff --git a/Shiar_Sheet/Colour.pm b/Shiar_Sheet/Colour.pm
new file mode 100644 (file)
index 0000000..1812789
--- /dev/null
@@ -0,0 +1,34 @@
+package Shiar_Sheet::Colour;
+
+use strict;
+use warnings;
+use List::Util 'min';
+
+our $VERSION = '1.00';
+
+sub new {
+       my $class = shift;
+       my @rgb = @_ >= 3 ? @_ : (map {hex} $_[0] =~ /(..)/g);
+       bless \@rgb, $class;
+}
+
+sub luminance {
+       # perceived brightness (using ITU-R recommendation 601 luma co-efficients)
+       my ($r, $g, $b) = @{ $_[0] };
+       return $r*.299 + $g*.587 + $b*.114;
+}
+
+sub rgb24 {
+       my $str = '';
+       $str .= sprintf '%X', min($_ / 17 + .5, 15) for @{ $_[0] };
+       return $str;
+}
+
+sub rgb48 {
+       my $str = '';
+       $str .= sprintf '%02X', $_ for @{ $_[0] };
+       return $str;
+}
+
+1;
+