tags:

views:

107

answers:

0

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; }