UIImageJPEGПредставление представления EXC_BAD_ACCESS - PullRequest
3 голосов
/ 21 августа 2011

В своем приложении я использую камеру и библиотеку фотографий, чтобы получить 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 Ответ

2 голосов
/ 21 августа 2011

Проблема может заключаться в том, что вы создаете свой растровый контекст или 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 внутри, что значительно облегчает вашу работу.

...