gpt4 book ai didi

objective-c - 在 CALayer 上显示 NSImage

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

我一直在尝试在 CALayer 上显示 NSImage。然后我意识到我显然需要将其转换为 CGImage,然后显示它......

我的代码似乎不起作用

CALayer *layer = [CALayer layer];

NSImage *finderIcon = [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kFinderIcon)];
[finderIcon setSize:(NSSize){ 128.0f, 128.0f }];

CGImageSourceRef source;
source = CGImageSourceCreateWithData((CFDataRef)finderIcon, NULL);
CGImageRef finalIcon = CGImageSourceCreateImageAtIndex(source, 0, NULL);

layer.bounds = CGRectMake(128.0f, 128.0f, 4, 4);
layer.position = CGPointMake(128.0f, 128.0f);
layer.contents = finalIcon;

// Insert the layer into the root layer
[mainLayer addSublayer:layer];
为什么?我怎样才能让它发挥作用?

最佳答案

来自评论:实际上,如果您使用的是 10.6,您也可以将 CALayer 的内容设置为 NSImage 而不是 CGImageRef...

<小时/>

如果您使用的是 OS X 10.6 或更高版本,请查看 NSImageCGImageForProposedRect:context:hints: 方法。

如果你不知道,我已经在 NSImage 的类别中找到了这个:

-(CGImageRef)CGImage
{
CGContextRef bitmapCtx = CGBitmapContextCreate(NULL/*data - pass NULL to let CG allocate the memory*/,
[self size].width,
[self size].height,
8 /*bitsPerComponent*/,
0 /*bytesPerRow - CG will calculate it for you if it's allocating the data. This might get padded out a bit for better alignment*/,
[[NSColorSpace genericRGBColorSpace] CGColorSpace],
kCGBitmapByteOrder32Host|kCGImageAlphaPremultipliedFirst);

[NSGraphicsContext saveGraphicsState];
[NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:bitmapCtx flipped:NO]];
[self drawInRect:NSMakeRect(0,0, [self size].width, [self size].height) fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0];
[NSGraphicsContext restoreGraphicsState];

CGImageRef cgImage = CGBitmapContextCreateImage(bitmapCtx);
CGContextRelease(bitmapCtx);

return (CGImageRef)[(id)cgImage autorelease];
}

认为这是我自己写的。但我完全有可能从 Stack Overflow 等其他地方抄袭它。这是一个较旧的个人项目,我不太记得了。

关于objective-c - 在 CALayer 上显示 NSImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950892/

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