У меня довольно странное поведение в моем коде.Я хочу редактировать некоторые графические вещи в UIGraphicsImageContext.Иногда это работает, иногда нет.Я отсоединяю функцию обработки изображений к новому потоку, который выглядит следующим образом:
-(void)process:(SEL)function withObject:(id)sender {
UIActivityIndicatorView *av = [[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease];
av.frame = CGRectMake(round((self.view.frame.size.width - 50) / 2),
round((self.view.frame.size.height - 50) / 2), 50, 50);
av.tag = kActivityTag;
[self.view addSubview:av];
[av startAnimating];
[self enableControls:NO];
[NSThread detachNewThreadSelector:function toTarget:self withObject:sender];
Перед тем, как одна из следующих функций вызывает функцию процесса:
-(void)imageColorTintChanged:(id)sender {
[self process:@selector(tint:) withObject:sender];}
-(void)tint:(id)sender {
@synchronized(image) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
float f = ((UISlider *)sender).value;
NSInteger tag = ((UISlider *)sender).tag;
if (tag == 0) {
redTint = f;
} else if (tag == 1) {
greenTint = f;
} else if (tag == 2) {
blueTint = f;
}
previewImage = [ImageUtil colorizeImage:image color:[UIColor colorWithRed:redTint green:greenTint blue:blueTint alpha:1.0]];
[imageView setImage:previewImage];
[self processDidFinish];
[pool release];
}}
Наконец,мое графическое редактирование начинается здесь в новой теме:
+ (UIImage *)colorizeImage:(UIImage *)baseImage color:(UIColor *)theColor {
if (baseImage) {
@synchronized (baseImage) {
UIGraphicsBeginImageContext(baseImage.size); // CRASH!!
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGRect area = CGRectMake(0.0f, 0.0f, baseImage.size.width, baseImage.size.height);
CGContextTranslateCTM(ctx, 0.0, baseImage.size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
[theColor set];
CGContextFillRect(ctx, area);
CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
CGContextDrawImage(ctx, area, baseImage.CGImage);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
}
return baseImage;
Большую часть времени происходит сбой в этой строке:
UIGraphicsBeginImageContext (baseImage.size);
Что можетэто может быть?Потоковая вещь?Заранее спасибо.
РЕДАКТИРОВАТЬ:
Ну, я сделал тест монитора активности на приборах и по какой-то причине он говорит, что утечки памяти нет, но реальное использование памяти до некоторой степени возрастает до 53 МБобработка изображения, а затем он падает.Возможно ли, что это просто какая-то ошибка «Я использую слишком много памяти»?