我写了一个小功能来放大2x。但是当我运行它时会出现EXC_BAD_ACCESS错误。以下是密码为我的功能提供EXC_BAD_ACCESS的iOS
- (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作为“CGBitmapContextCreate”的第五个参数并且为另一个你不能自动释放CG对象而说“我的上下文每行有零个字节”。不要尝试。 – borrrden
@borrrden嗨,我正在修改一个已经工作的功能来旋转图像做我的缩放。在该函数中,CGBitmapContextCreate的第五个参数是零,并且还为CGImageRef对象调用autorelease。该功能工作正常。所以我怀疑这是否是错误。请发表评论 – Shamy
Autorelease是一个Objective-c函数,但CGImageRef是一个C对象,所以autorelease不适用于它(并且它最终都不会被autorelease池调用)。知道哪条线路导致崩溃也很有帮助。就零事件而言,苹果可能已经停止在后端使用它,因为他们意识到它们可以计算它,但在那里零就很奇怪。 – borrrden