ICC-Profile
view release on metacpan or search on metacpan
lib/ICC/Profile/gbd_.pm view on Meta::CPAN
$dxy = $dot->[$n * $i + $j];
# compute face ID list, sorted by dot product
$self->[5][$i][$j] = [map {$_->[0]} sort {$b->[1] <=> $a->[1]} map {[$_, $dxy->[$_]]} (0 .. $#{$self->[1]})];
}
}
# save internal point in header hash
$self->[0]{'p0'} = $p0;
}
# make new gbd_ object from attribute hash
# hash keys are: ('vertex', 'pcs', 'device')
# object elements not specified in the hash are unchanged
# parameters: (ref_to_object, ref_to_attribute_hash)
sub _new_from_hash {
# get parameters
my ($self, $hash) = @_;
# local variables
my ($value, $f, $v, $e);
# if 'vertex' key defined
if (defined($hash->{'vertex'})) {
# get value
$value = $hash->{'vertex'};
# if reference to a 2-D array
if (ref($value) eq 'ARRAY' && @{$value} == grep {ref() eq 'ARRAY'} @{$value}) {
# set vertex to clone of array
$self->[1] = bless(Storable::dclone($value), 'Math::Matrix');
# if a reference to a Math::Matrix object
} elsif (UNIVERSAL::isa($value, 'Math::Matrix')) {
# set vertex to object
$self->[1] = $value;
} else {
# wrong data type
croak('wrong \'vertex\' data type');
}
# verify number of faces
(@{$self->[1]} >= 4) || croak('number of faces < 4');
# verify number of vertices per face
(@{$self->[1]} == 3) || croak('number of vertices per face <> 3');
# check gamut faces
($f, $v, $e) = _check_faces($self);
# verify closed shape using Euler's formula
($f + $v - $e == 2) || carp('not a closed shape');
}
# if 'pcs' key defined
if (defined($hash->{'pcs'})) {
# get value
$value = $hash->{'pcs'};
# if reference to a 2-D array
if (ref($value) eq 'ARRAY' && @{$value} == grep {ref() eq 'ARRAY'} @{$value}) {
# set pcs to clone of array
$self->[1] = bless(Storable::dclone($value), 'Math::Matrix');
# if a reference to a Math::Matrix object
} elsif (UNIVERSAL::isa($value, 'Math::Matrix')) {
# set pcs to object
$self->[2] = $value;
} else {
# wrong data type
croak('wrong \'pcs\' data type');
}
# verify number of vertices
(@{$self->[2]} >= 4) || croak('number of vertices < 4');
# verify number of pcs channels
(@{$self->[2][0]} >= 3) || croak('number of pcs channels < 3');
}
# if 'device' key defined
if (defined($hash->{'device'})) {
# get value
$value = $hash->{'device'};
# if reference to a 2-D array
if (ref($value) eq 'ARRAY' && @{$value} == grep {ref() eq 'ARRAY'} @{$value}) {
# set device to clone of array
$self->[1] = bless(Storable::dclone($value), 'Math::Matrix');
# if a reference to a Math::Matrix object
} elsif (UNIVERSAL::isa($value, 'Math::Matrix')) {
# set device to object
$self->[3] = $value;
} else {
# wrong data type
croak('wrong \'device\' data type');
( run in 0.722 second using v1.01-cache-2.11-cpan-5735350b133 )