###########################################
package ColorCast;
# Mike Schilli, 2008 (
[email protected])
###########################################
use strict;
use warnings;
use YAML qw(LoadFile DumpFile);
use Gimp qw(:auto);
use Log::Log4perl qw(:easy);
my %channels = (
red => HISTOGRAM_RED,
blue => HISTOGRAM_BLUE,
green => HISTOGRAM_GREEN,
);
###########################################
sub new {
###########################################
my($class, %options) = @_;
my $self = {
yml_file => undef,
drawable => undef,
ctrls => undef,
%options,
};
bless $self, $class;
}
###########################################
sub save {
###########################################
my($self) = @_;
DumpFile $self->{yml_file},
$self->{ctrls};
}
###########################################
sub load {
###########################################
my($self) = @_;
$self->{ctrls} =
LoadFile $self->{yml_file};
}
###########################################
sub adjust_to {
###########################################
my($self, $ref_channel) = @_;
DEBUG "Adjusting to $ref_channel";
for my $channel (keys %channels) {
next if $ref_channel eq $channel;
my $ctrls = $self->{ctrls};
my @points = (0, 0, 255, 255);
for my $ctrl (keys %$ctrls) {
push @points,
$ctrls->{$ctrl}->{$channel},
$ctrls->{$ctrl}->{$ref_channel};
}
gimp_curves_spline(
$self->{drawable},
$channels{ $channel },
\@points);
}
}
1;