0

UIImageをcv::Matに変換してから、UIImageに戻し、そのUIImageをUIImageViewに挿入しようとしています。

これは私が変換するために使用しているコードです:

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;

}

正常に変換されますが、UIImageViewに挿入するとすぐにクラッシュするので、問題はそこにあると思います。

元の画像(cv :: Matに変換する前の画像)を保持している場合、クラッシュは発生しませんが、リークが発生することに気付きました。

問題が何であるかについて何か考えはありますか?

4

1 に答える 1

0

CGImageRefをリリースしすぎていたことがわかりました。

于 2012-06-05T02:33:36.800 に答える