On 18 January 2009 18:19:06 you wrote:
> I am willing to transmit this bug report to upstream, but unfortunatly I am
> not really a perl hacker.
>
> therefore could you please summarize this bug for us poor mortal soul :)
> Including may be a test case :)
Hello.
Test case is very simple and obvious when you know what is wrong.
my $image = new Image::Magick;
$iImage->Read("template.png");
# template.png is just any RGB image you want to use
$image->SetPixel(channel => "Blue", x => 10, y => 10, color => [1]);
$image->Write("out_image.png");
this code must put a blue pixel at (10,10) location and write a resulting
image. But it doesn't. Actually, if I do:
$image->SetPixel(channel => "RGB", x => 10, y => 10, color =>
[1,1,1]);
it will put a yellow(!) point instead of white! I need to put one extra
element into the array of colors to have this working as expected. The
reason: in the file Magick.xs in function SetPixel av_len() function used as
if it returns length of an array but actually it returns highest index. In
this code:
if (((channel & RedChannel) != 0) && (i < av_len(av)))
{
q->red=RoundToQuantum(QuantumRange*SvNV(*(av_fetch(av,i,0))));
i++;
}
if (((channel & GreenChannel) != 0) && (i < av_len(av)))
{
q->green=RoundToQuantum(QuantumRange*SvNV(*(av_fetch(av,i,0))));
i++;
}
if (((channel & BlueChannel) != 0) && (i < av_len(av)))
{
q->blue=RoundToQuantum(QuantumRange*SvNV(*(av_fetch(av,i,0))));
i++;
}
if ((((channel & IndexChannel) != 0) &&
(image->colorspace == CMYKColorspace)) && (i < av_len(av)))
{
*indexes=RoundToQuantum(QuantumRange*SvNV(*(av_fetch(av,i,0))));
i++;
}
if (((channel & OpacityChannel) != 0) && (i < av_len(av)))
{
q->opacity=RoundToQuantum(QuantumRange*SvNV(*(av_fetch(av,i,0))));
i++;
}
av_len must be used as (i <= av_len(av)).
--
Anton Petrusevich
--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]