I have a leak in the code which I put below. When I used cvCreateImage instead of cvCreateImageHeader it was 304Kb and 107b leak but when I changed it became to be 107 bites only. Could You help me to find leak.
(IplImage *) nsImageToIplImage:(NSImage *)image { // NSImage to IplImage
NSBitmapImageRep *orig = [[image representations] objectAtIndex: 0]; // a copy or else the color-channel shift that we do later on will affect the original NSImage!
NSBitmapImageRep *rep = [NSBitmapImageRep imageRepWithData:[orig representationUsingType:NSTIFFFileType properties:NULL]]; int depth = [rep bitsPerSample]; int channels = [rep samplesPerPixel]; int height = [rep size].height; int width = [rep size].width;
// note- channels had better be "3", or else the loop down below will act pretty funky... // NSTIFFFileType seems to always give three-channel images, so I think it's okay...
IplImage *to_return = cvCreateImageHeader(cvSize(width, height), depth, channels); cvSetImageData(to_return, [rep bitmapData], [rep bytesPerRow]);
// Reorder BGR to RGB // no, I don't know why it's in BGR after cvSetData for (int i = 0; i < to_return->imageSize; i += 3) { uchar tempR, tempG, tempB; tempR = to_return->imageData[i]; tempG = to_return->imageData[i+1]; tempB = to_return->imageData[i+2];
to_return->imageData[i] = tempR; to_return->imageData[i+1] =tempG; to_return->imageData[i+2] = tempB;
}
return to_return; }