UIImageJPEGRepresentation给EXC_BAD_ACCESS

问题描述:

在我的应用我使用的相机和照片库得到一个UIImage的,
这UIImage的,然后按比例缩小约20倍正常大小 然后我设置基于关闭的UIImage一个NSData对象。UIImageJPEGRepresentation给EXC_BAD_ACCESS

_regularImage = [self resizeImage:_takenImage width:100 height:100]; 


-(UIImage *)resizeImage:(UIImage *)anImage width:(int)width height:(int)height 
{ 

    CGImageRef imageRef = [anImage CGImage]; 

    CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef); 

    if (alphaInfo == kCGImageAlphaNone) 
     alphaInfo = kCGImageAlphaNoneSkipLast; 


    CGContextRef bitmap = CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(imageRef), 4 * width, CGImageGetColorSpace(imageRef), alphaInfo); 

    CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef); 

    CGImageRef ref = CGBitmapContextCreateImage(bitmap); 
    UIImage *result = [UIImage imageWithCGImage:ref]; 

    CGContextRelease(bitmap); 
    CGImageRelease(ref); 

    return result;  
} 

NSData *image1Data = UIImageJPEGRepresentation(_regularImage, 1); 

我似乎无法弄清楚什么都重要的是,可能会导致这样

谢谢

LittleRy

+0

请显示您的其他代码。错误发生在哪条线上? – jtbandes

+0

@jtbandes他说它发生在JPEGRepresentation行上。 –

这里的问题可能是你在创建位图上下文或UIImage的错误的方法。尝试调试并检查_regularImage是否为零,或者它是否无效。为了缩放图像,我建议使用名为ANImageBitmapRep的第三方库。这是一小组类,允许在iPhone上轻松裁剪,调整大小,旋转等图像。缩放一个UIImage可以做这样的:

ANImageBitmapRep * irep = [ANImageBitmapRep imageBitmapRepWithImage:myImage]; 
[irep setSize:BMPointMake(myWidth, myHeight)]; // scale the image 
UIImage * theImage = [irep image]; 
[irep release]; 
NSData * jpeg = UIImageJPEGRepresentation(theImage, 1); 

有了这种代码我怀疑UIImageJPEGRepresentation将是问题。 ANImageBitmapRep类本身在内部处理CGContextRef的东西,使您的工作更容易。

+0

我也改变了一些我的变量,所以我不能肯定地说,如果那是什么帮助。虽然我会将Libary用于许多其他项目,谢谢 –