如何从 NSAttributedString 创建剪贴蒙版?

发布于 2024-10-30 02:12:14 字数 754 浏览 0 评论 0原文

我有一个 NSAttributedString,我想将其绘制到 CGImage 中,以便稍后可以将 CGImage 绘制到 NSView 中。到目前为止,这是我所拥有的:

// Draw attributed string into NSImage
NSImage* cacheImage = [[NSImage alloc] initWithSize:NSMakeSize(w, h)];
[cacheImage lockFocus];
[attributedString drawWithRect:NSMakeRect(0, 0, width, height) options:0];
[cacheImage unlockFocus];

// Convert NSImage to CGImageRef
CGImageSourceRef source = CGImageSourceCreateWithData(
    (CFDataRef)[cacheImage TIFFRepresentation], NULL);
CGImageRef img =  CGImageSourceCreateImageAtIndex(source, 0, NULL);

我没有使用 -[NSImage CGImageForProfusedRect:context:hints] 因为我的应用程序必须使用 10.5 sdk。

当我使用 CGContextDrawImage 将其绘制到 NSView 中时,它会在文本周围绘制透明背景,从而使窗口后面的任何内容都显示出来。我想我想创建一个剪贴蒙版,但我不知道该怎么做。

I have an NSAttributedString which I would like to draw into a CGImage so that I can later draw the CGImage into an NSView. Here's what I have so far:

// Draw attributed string into NSImage
NSImage* cacheImage = [[NSImage alloc] initWithSize:NSMakeSize(w, h)];
[cacheImage lockFocus];
[attributedString drawWithRect:NSMakeRect(0, 0, width, height) options:0];
[cacheImage unlockFocus];

// Convert NSImage to CGImageRef
CGImageSourceRef source = CGImageSourceCreateWithData(
    (CFDataRef)[cacheImage TIFFRepresentation], NULL);
CGImageRef img =  CGImageSourceCreateImageAtIndex(source, 0, NULL);

I'm not using -[NSImage CGImageForProposedRect:context:hints] because my app must use the 10.5 sdk.

When I draw this into my NSView using CGContextDrawImage, it draws a transparent background around the text, causing whatever is behind the window to show through. I think I want to create a clipping mask, but I can't figure out how to do that.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

童话里做英雄 2024-11-06 02:12:14

听起来你的混合模式设置为 Copy 而不是 SourceOver。看看 CoreGraphics 混合模式文档

It sounds like your blend mode it set up as Copy instead of SourceOver. Take a look at the CoreGraphics blend mode documentation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文