Я застрял с проблемой на CIFilters и их применения.Либо фильтр применяется только к 1/3 изображения (GPU), либо фильтр работает только один раз (CPU).Повторение той же операции на процессоре приведет к 1/3 изображения;повторяя операцию на том же самом с вычислениями CPU, CIFilter не работает / не применяется.
Я пытался добавить примеры изображений, но я здесь для начала, так что это не разрешено. Пожалуйста, посмотрите на мой оригинальный пост в Apple https://discussions.apple.com/message/16412850#16412850.Приносим извинения за неудобства.
Вопросы:
- Почему CIFilter не работает детерминистически на процессоре?
- Почему рендерер GPU останавливается точно послетреть изображения?
- Есть ли способ отладки CIFilter?QuartzComposer разрешает только заданный код ядра - но есть ли отладчик / регистратор?
Заранее спасибо, Дирк
PS. Я также пытался переключить видеокарту,но это тоже не помогло.
Вот код, части взяты из примера ImageApp от Apple.
- (void)createCGImageAtPathNamed:(NSString*)destPath
{
if (false == didInit)
return ;
CGColorSpaceRef myColorspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
size_t height = CGImageGetHeight(leftCGImageRef);
size_t width = CGImageGetWidth(leftCGImageRef);
CGRect rect = {{0,0}, {width, height}};
size_t bitsPerComponent = 8;
size_t bytesPerRow = rect.size.width*4; //bytes per row - one byte each for argb
bytesPerRow += (16 - bytesPerRow%16)%16;
CGImageAlphaInfo alphaInfo = kCGImageAlphaPremultipliedFirst;
CGContextRef context = CGBitmapContextCreate(nil, width, height, bitsPerComponent, bytesPerRow, myColorspace, alphaInfo);
NSDictionary *contextOptions = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool: wantsSoftRenderer],kCIContextUseSoftwareRenderer,nil];
CIContext* cicontext = [CIContext contextWithCGContext: context options: contextOptions];
CIImage *ciimgLeft = leftCIImage;
CIImage *ciimgRight = rightCIImage;
CIFilter *mFilter;
[CIPlugIn loadAllPlugIns];
mFilter = [[CIFilter filterWithName: @"CILightenBlendMode"] retain];
[mFilter setValue: ciimgLeft forKey: @"inputImage"];
[mFilter setValue: ciimgRight forKey: @"inputBackgroundImage"];
CIImage* resultingImage = [mFilter valueForKey: kCIOutputImageKey];
CGRect extent = [ciimgLeft extent];
[cicontext drawImage: resultingImage inRect:rect fromRect:extent];
CGImageRef image = CGBitmapContextCreateImage(context);
CGContextRelease(context);
NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithCGImage: image];
NSData *jpegData = [bitmapRep representationUsingType:NSJPEGFileType properties:nil];
[jpegData writeToFile: destPath atomically: YES];
[bitmapRep release];
[mFilter release];
CGColorSpaceRelease(myColorspace);
}