MagickWand C API, error when calling DestroyPixelWands
Posted: 2011-09-06T10:46:21-07:00
I am starting to use ImageMagick and the MagickWand API in a simple C program.
Right now, as a test, I am just looking for black pixels in a frame.
Here is my code :
If I uncomment any of the DestroyPixelWands call, I get an assertion :
The version I use :
Even calling `DestroyPixelWand(pixels[0]);` makes it fail the same way...
Posted that question on StackOverflow, but did not seem to get much success there...
http://stackoverflow.com/questions/7277 ... pixelwands
Right now, as a test, I am just looking for black pixels in a frame.
Here is my code :
Code: Select all
int find_black_pixel(MagickWand *wand) {
int res = 0;
PixelIterator * iterator = NewPixelIterator(wand);
size_t width=MagickGetImageWidth(wand);
size_t height=MagickGetImageHeight(wand);
PixelWand ** pixels;
unsigned long x,y;
unsigned int alpha;
unsigned int red, green, blue;
//printf("Width : %d, Height : %d\n", (int)width, (int)height);
for (y=0; y<height; y++) {
pixels = PixelGetNextIteratorRow(iterator, &width);
for (x=0; x<width; x++) {
alpha = (unsigned int) (255*PixelGetAlpha(pixels[x]));
if (alpha == 0)
continue;
red = (unsigned int) (255*PixelGetRed(pixels[x]));
green = (unsigned int) (255*PixelGetGreen(pixels[x]));
blue = (unsigned int) (255*PixelGetBlue(pixels[x]));
//printf("At %04ld,%04ld, alpha : %d, rgb : %d,%d,%d\n", x,y,alpha, red, green, blue);
if ((red ==0) || (green == 0) || (blue ==0)) {
res = 1;
//DestroyPixelWands(pixels, width);
goto finished_find_black_pixel;
}
}
//DestroyPixelWands(pixels, (size_t)width);
}
finished_find_black_pixel:
DestroyPixelIterator(iterator);
return res;
}
Any idea why this is happening ?test: wand/pixel-wand.c:283: DestroyPixelWands: Assertion `(*wand)->signature == 0xabacadabUL' failed.
The version I use :
That's on a Linux (Ubuntu 11.04) machine.$ convert -version
Version: ImageMagick 6.6.2-6 2011-03-16 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2010 ImageMagick Studio LLC
Features: OpenMP
Even calling `DestroyPixelWand(pixels[0]);` makes it fail the same way...
Posted that question on StackOverflow, but did not seem to get much success there...
http://stackoverflow.com/questions/7277 ... pixelwands