I’m attempting to convert a UIImage to a cv::Mat and then back to a UIImage and insert that UIImage into a UIImageView.
This is the code I’m using to convert:
UIImage * imageFromMat(const cv::Mat& cvMat){
NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize() * cvMat.total()];
CGColorSpaceRef colorSpace;
if (cvMat.elemSize() == 1) {
colorSpace = CGColorSpaceCreateDeviceGray();
} else {
colorSpace = CGColorSpaceCreateDeviceRGB();
}
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
CGImageRef imageRef = CGImageCreate(cvMat.cols,
cvMat.rows,
8,
8 * cvMat.elemSize(),
cvMat.step[0],
colorSpace,
kCGImageAlphaNone | kCGBitmapByteOrderDefault,
provider,
NULL,
false,
kCGRenderingIntentDefault);
UIImage *image = [[[UIImage alloc] initWithCGImage:imageRef] autorelease];
CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);
return image;
}
It converts fine but as soon as I insert it into a UIImageView, I get a crash, so I’m assuming the problem lies there.
I’ve noticed that if I retain the original image(the one before converting to cv::Mat) the crash doesn’t happen, but I get a leak.
Any thoughts on what the problem could be?
Turns out I was over releasing CGImageRef.