Как увеличить масштаб и обрезать UIImage? - PullRequest
0 голосов
/ 04 сентября 2010

Вот код, который у меня есть, но он рушится ... есть идеи?

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();

Что мне здесь не хватает? По сути, просто пытаюсь увеличить изображение и обрезать его до размера оригинала.

Спасибо

Ответы [ 2 ]

1 голос
/ 04 сентября 2010

Проблема в этой строке:

CGImageRef imgRef = [tempImage CGImage];

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

[tempImage release];

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

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

  • использование автоматического выпуска для задержки выпуска изображения:*
  • переместите релиз в самый конец вашего метода
  • сохраните и отпустите изображение, используя CFRetain и CFRelease.
0 голосов
/ 08 марта 2013

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

-(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]];
...