2010-09-04 5 views
0

Вот код, который у меня есть, но он рушится ... любые идеи?Как увеличить и обрезать UIImage?

UIImage *tempImage = [[UIImage alloc] initWithData:imageData]; 
CGImageRef imgRef = [tempImage CGImage]; 
[tempImage release]; 

CGFloat width = CGImageGetWidth(imgRef); 
CGFloat height = CGImageGetHeight(imgRef); 
CGRect bounds = CGRectMake(0, 0, width, height); 
CGSize size = bounds.size; 

CGAffineTransform transform = CGAffineTransformMakeScale(4.0, 4.0); 

UIGraphicsBeginImageContext(size); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextConcatCTM(context, transform); 
CGContextDrawImage(context, bounds, imgRef); 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

Что мне здесь не хватает? В основном просто пытается масштабировать изображение и обрезать его таким же размером, как оригинал.

Благодаря

+0

какой-то аварии? Что такое сообщение об ошибке? Какая линия вызывает сбои? – vodkhang

ответ

1

Проблема эта линия:

CGImageRef imgRef = [tempImage CGImage]; 

Или точнее, прямым продолжением этой линии:

[tempImage release]; 

Вы получаете объект CF здесь, CGImageRef. Объект Core Foundation имеет только управление памятью/выпуском памяти, но не автореализованные объекты. Следовательно, когда вы отпускаете UIImage во второй строке, также будут удалены CGImageRef. И это снова означает, что он не определен, когда вы пытаетесь провести его там.

я могу думать о трех исправлений:

  • использование autorelease задержать выход изображения: [tempImage autorelease];
  • движение релиз в самом низу метода
  • сохранить и освободить изображение с помощью CFRetain и CFRelease.
0

Попробуйте это:

-(CGImageRef)imageCapture 
{ 
    UIGraphicsBeginImageContext(self.view.bounds.size); 
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    CGRect rect= CGRectMake(0,0 ,320, 480); 

    CGImageRef imageRef = CGImageCreateWithImageInRect([viewImage CGImage], rect); 
    return imageRef; 
} 

использовать строку ниже, когда вы хотите, чтобы захватить экран

UIImage *captureImg=[[UIImage alloc] initWithCGImage:[self imageCapture]]; 
Смежные вопросы