gpt4 book ai didi

objective-c - CGLayerRef 仅在 OS X 10.11 (El Capitan) 中显示为空

转载 作者:行者123 更新时间:2023-12-03 17:49:27 25 4
gpt4 key购买 nike

我有一个图像编辑应用程序,在 10.10 版本中一直正常运行,但在 10.11 版本中出现了错误

当我查看使用 -imageWithCGLayer 创建的 CIImage 时,它仅在 10.11 中显示为空图像(大小正确)

   CGSize size =  NSSizeToCGSize(rect.size);
size_t width = size.width;
size_t height = size.height;
size_t bitsPerComponent = 8;
size_t bytesPerRow = (width * 4+ 0x0000000F) & ~0x0000000F; // 16 byte aligned is good
size_t dataSize = bytesPerRow * height;
void* data = calloc(1, dataSize);

CGColorSpaceRef colorspace = [[[_imageController document] captureColorSpace] CGColorSpace];
CGContextRef bitmapContext = CGBitmapContextCreate(data, width, height, bitsPerComponent, bytesPerRow, colorspace, kCGImageAlphaNone | kCGBitmapByteOrder32Host);

CGLayerRef canvasLayer = CGLayerCreateWithContext(bitmapContext, scaledRect.size, NULL);

[self drawCanvasInLayer:canvasLayer inRect:scaledRect];
CIImage *test = [CIImage imageWithCGLayer:canvasLayer];
NSLog(@"%@",test);

因此,当我在 10.10 上查看 CIImage *test 时,它看起来完全符合我的要求。在 10.11 上,它是相同大小的空白图像。我尝试查看 CGLayer 和 CIImage 的 API 差异,但文档对我来说太密集了。还有其他人偶然发现这个问题吗?我想它一定是与 CGContextRef 的初始化有关,因为代码中的其他所有内容都与大小相关

最佳答案

该特定 API 不久前已被弃用,并在 macOS 10.11 中完全删除。所以你的结果是预期的。

由于您已经有一个 bitmapContext,因此修改您的 -drawCanvasInLayer: 方法以直接绘制位图,然后使用 bitmpap 上下文创建图像,

CGImageRef tmpCGImage = CGBitmapContextCreateImage( bitmapContext );
CIImage* myCIImage = [[CIImage alloc] initWithCGImage: myCIImage];

记住在完成 CIImage 之后执行CGImageRelease( tmpCGImage ) 操作。

我最近解决了这个问题,并发布了一个示例 Objective-C 项目来解决此 API 的丢失问题。

参见http://www.blinddogsoftware.com/goodies/#DontSpillTheBits

另外,不要忘记阅读声明该 API 的头文件。那里经常有非常有用的信息(在 Xcode 中,Command+单击特定的 API)

关于objective-c - CGLayerRef 仅在 OS X 10.11 (El Capitan) 中显示为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31484680/

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