gpt4 book ai didi

objective-c - NSTextView 未将文本绘制到 NSImage 上

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

我正在尝试在 NSImage 上绘制一些文本,但遇到了一些问题。
最初我只是在 NSImage 上绘制一个属性字符串,但如果字符串太长,它会超出图像,并且我找不到将文本换行的方法。

为了解决这个问题,我想我可以制作一个 NSTextView,将文本放在那里,然后将其绘制到 NSImage 上。

不幸的是,当我尝试将 NSTextView 绘制到 NSImage 时,文本没有出现。 NSTextView 的背景颜色确实显示出来了。

当我在将焦点锁定在 NSImage 之前设置断点并预览 NSTextView 时, TextView 有文本。将 TextView 绘制到 NSImage 上后,看起来 NSTextView 已被绘制,只是没有文本。

如果有更好的方法将文本扔到具有多行能力的 NSImage 上,请告诉我如何做。

这是我写的代码供引用:

NSTextView *textToDraw = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, input.size.width - 16, 243)];
textToDraw.backgroundColor = [NSColor blueColor];
[textToDraw setAlignment:NSTextAlignmentCenter];
[textToDraw setEditable:YES];
// textOnImage is a regular NSString
[textToDraw insertText:textOnImage replacementRange:NSMakeRange(0, textOnImage.length)];
[textToDraw setTextColor:[NSColor blackColor]];
[textToDraw setFont:font];
[textToDraw setEditable:NO];

// input is an NSImage
[input lockFocus];
[textToDraw drawRect:NSMakeRect(8, inputImage.size.height - textToDraw.frame.size.height - 8, textToDraw.frame.size.width, textToDraw.frame.size.height)];
[input unlockFocus];

最佳答案

您可以提供应在其中绘制文本的有界矩形,而不是在图像上绘制 TextView 。如果字符串太长,它不会脱离图像并自动换行。

这里是代码,其中 inputImage 是您要在其上绘制文本的图像

NSImage *newImage = [[NSImage alloc] initWithSize:inputImage.size];  
[newImage lockFocus];
[inputImage drawAtPoint:NSZeroPoint fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
[textStr drawInRect:boundedRect withAttributes:attrsDictionary];
[newImage unlockFocus];

关于objective-c - NSTextView 未将文本绘制到 NSImage 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34731782/

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