2012-06-13 3 views
0

줌 기능을 2 배로 작게 썼습니다. 하지만 그것을 실행하는 동안 EXC_BAD_ACCESS 오류를 제공하고 있습니다. 아래 코드는iOS가 내 기능에 EXC_BAD_ACCESS를 부여했습니다.

- (CGImageRef)CGImageScale2x:(CGImageRef)imgRef 
{ 
    CGFloat width = CGImageGetWidth(imgRef); 
    CGFloat height = CGImageGetHeight(imgRef); 

    CGRect imgRect = CGRectMake(0, 0, width, height); 
    CGAffineTransform transform = CGAffineTransformMakeScale(2.0, 2.0); 
    CGRect scaledRect = CGRectApplyAffineTransform(imgRect, transform); 

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef bmContext = CGBitmapContextCreate(NULL, 
                scaledRect.size.width, 
                scaledRect.size.height, 
                8, 
                0, 
                colorSpace, 
                kCGImageAlphaPremultipliedFirst); 
    CGContextSetAllowsAntialiasing(bmContext, FALSE); 
    CGContextSetInterpolationQuality(bmContext, kCGInterpolationNone); 
    CGColorSpaceRelease(colorSpace); 
    CGContextScaleCTM(bmContext, 2.0, 2.0); 
    CGContextDrawImage(bmContext, CGRectMake(0, 0, 
              scaledRect.size.width, 
              scaledRect.size.height), 
         imgRef); 

    CGImageRef scaledImage = CGBitmapContextCreateImage(bmContext); 
    CFRelease(bmContext); 
    [(id)scaledImage autorelease]; 

    return scaledImage; 
} 

입니다. iOS를 처음 사용합니다. 도와주세요.

감사

+0

글쎄, 한 가지 말하자면, "CaveitmapContextCreate"의 다섯 번째 인수로 0을 전달하면 "내 컨텍스트의 행이 0 바이트가됩니다."하고 다른 경우에는 CG 객체를 자동 회수 할 수 없습니다. 시도하지 마십시오. – borrrden

+0

@borrrden 안녕하세요, 이미 확대/축소 할 이미지를 회전하려면 이미 작동하는 함수를 수정하고 있습니다. 이 함수에서 CGBitmapContextCreate의 다섯 번째 인수는 0이고 또한 CGImageRef 객체에 대해 autorelease가 호출됩니다. 그 기능은 잘 작동합니다. 그래서 그것이 버그인지 의심 스럽습니다. 의견을 말하십시오 – Shamy

+0

Autorelease는 objective-c 함수입니다. 그러나 CGImageRef는 C 객체이므로 autorelease가 적용되지 않습니다. (결국 autorelease 풀에서 호출되는 릴리스도 마찬가지입니다.) 어떤 라인이 충돌을 일으키는 지 아는 것도 도움이 될 것입니다. 0에 이르기까지, 아마 애플은 계산할 수 있다는 것을 알고 있기 때문에 백엔드에서 사용을 중단했을 것이다.하지만 거기에 제로가있는 것은 이상하다. – borrrden

답변

1

CGImageRef은 코어 재단 유형이다, 오토 릴리즈 할 수 없습니다. 대신 CGImageRelease(scaledImage)을 사용해보십시오.

+1

'CGImageRelease'가되어야하지만, 다시 한번 이름 짓기와 다른 점이 없을 수도 있습니다. – borrrden

+0

네 말이 맞아. 고마워. –

관련 문제