Hi
I want to call a subroutine ImageNotDark. I want to pass an Image::Magick object ($pic).
By design, the object is not changed inside the subroutine. My problem is that I am not passing the image object correctly.
# Convert to Image::Maggick image
my $pic = Image::Magick->new(magick=>'jpg'); # create new image obj
+ect
$pic->BlobToImage($img); #convert the grabbed blob image to Image::Ma
+gick object
## test point A
#pass the $pic object to the subroutine and measure image darkness.
my $test = ImageNotDark ($pic); #
The code snippet at the start of the subroutine is as follows:
sub ImageNotDark {
# Argument is one reference to an image object.
# ImageNotDark compares the image with a blank black canvas. If the c
+omparison is
# above the defined threshold, the image is bright enough to send (not
+ dark).
# the return value is true if the images is bright enough.
my $iutImage = Image::Magick->new; #the image tested for darkness
$iutImage->Read(@_); # get the image under test (iut)
So the debugger shows that $iutImage is not initialised. At test point A, I temporarily added code to save the $pic image to a file.
I was able to confirm that $pic holds a valid image. So I am reasonably certain the problem is the way I call the subroutine and attempt to pass the image. Any tips would be much appreciated.
SOLVED with the answer below from Haukex. I applied the option on the last line.
You don't need to construct a new Image::Magick over the argument passed to the subroutine. The normal way to handle arguments is (see perlsub):
sub ImageNotDark {
my ($iutImage,$arg2,$arg3,...) = @_;
# --OR--
my $iutImage = shift;
my $arg2 = shift;
...
Or, if your intention were to work with a copy of the image in the subroutine, you could simply do my $imgCopy = $_[0]->Clone(); inside the subroutine.