我试图在NSImage上绘制一些文字,但我遇到了一些问题 最初我只是在NSImage上绘制一个属性字符串,但是如果字符串太长则会运行图像,我找不到将文本换行到换行符的方法。
为了解决这个问题,我想我可以制作一个NSTextView,将文本放在那里,然后将其绘制到NSImage上。
不幸的是,当我尝试将NSTextView绘制到NSImage时,文本不会出现。 NSTextView的背景颜色确实显示出来了。
当我在将焦点锁定在NSImage之前设置断点并预览NSTextView时,文本视图有文本。在我将文本视图绘制到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];
答案 0 :(得分:0)
您可以提供应在其中绘制文本的有界矩形,而不是在图像上绘制文本视图。如果字符串太长,它将不会从图像中运行并自动进入新行。
以下是代码,其中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];