UIImageJPEG Представление представления EXC_BAD_ACCESS
В моем приложении я использую камеру и библиотеку фотографий, чтобы получить UIImage,
Затем этот UIImage уменьшается в 20 раз по сравнению с его обычным размером. Затем я устанавливаю объект NSData на основе UIImage.
_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
1 ответ
Проблема может заключаться в том, что вы создаете свой растровый контекст или 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
внутренне, что делает вашу работу намного проще.