gpt4 book ai didi

cocoa - 使用CALayer的renderInContext : method with geometryFlipped

转载 作者:行者123 更新时间:2023-12-03 16:07:38 25 4
gpt4 key购买 nike

我有一个 CALayer (containerLayer),希望在将数据保存为平面文件之前将其转换为 NSBitmapImageRepcontainerLayer 将其 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];

最佳答案

您需要在渲染之前翻转目标上下文。

用这个更新你的代码,我刚刚解决了同样的问题:

CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, pixelsHigh);
CGContextConcatCTM(context, flipVertical);
[[[self containerLayer] presentationLayer] renderInContext:context];

关于cocoa - 使用CALayer的renderInContext : method with geometryFlipped,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7856127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com