Использование метода CALayer renderInContext: с geometryFlipped

У меня есть CALayer ( containerLayer ), который я хочу преобразовать в NSBitmapImageRep перед сохранением данных в виде плоского файла. containerLayer свойству geometryFlipped присвоено значение YES, и это, похоже, вызывает проблемы. Файл PNG, который в конечном итоге создается, правильно отображает содержимое, но, похоже, не принимает во внимание перевернутую геометрию. Я, очевидно, ищу test.png, чтобы точно представить содержимое, показанное слева.

Ниже прилагается снимок экрана с проблемой и кодом, с которым я работаю.

A visual example

- (NSBitmapImageRep *)exportToImageRep
{
    CGContextRef context = NULL;
    CGColorSpaceRef colorSpace;
    int bitmapByteCount;
    int bitmapBytesPerRow;

    int pixelsHigh = (int)[[self containerLayer] bounds].size.height;
    int pixelsWide = (int)[[self containerLayer] bounds].size.width;

    bitmapBytesPerRow = (pixelsWide * 4);
    bitmapByteCount = (bitmapBytesPerRow * pixelsHigh);

    colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
    context = CGBitmapContextCreate (NULL,
                                     pixelsWide,
                                     pixelsHigh,
                                     8,
                                     bitmapBytesPerRow,
                                     colorSpace,
                                     kCGImageAlphaPremultipliedLast);
    if (context == NULL)
    {
        NSLog(@"Failed to create context.");
        return nil;
    }

    CGColorSpaceRelease(colorSpace);
    [[[self containerLayer] presentationLayer] renderInContext:context];    

    CGImageRef img = CGBitmapContextCreateImage(context);
    NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCGImage:img];
    CFRelease(img);

    return bitmap;    
}

Для справки, вот код, который фактически сохраняет сгенерированный NSBitmapImageRep :

NSData *imageData = [imageRep representationUsingType:NSPNGFileType properties:nil];
[imageData writeToFile:@"test.png" atomically:NO]; 
7
задан ndg 21 October 2011 в 22:54
поделиться