我正面临一个奇怪的问题,我正在使用以下伪代码在NSImage中绘图:
NSString* text = @"Hello world!";
NSDictionary *dict = [[[NSDictionary alloc] initWithObjectsAndKeys:[NSColor colorWithCGColor:textColor],NSForegroundColorAttributeName,font, NSFontAttributeName,nil] autorelease];
NSMutableAttributedString* str = [[[NSMutableAttributedString alloc] initWithString:text attributes:dict] autorelease];
NSSize stringSize = [str size];
NSImage* image = [[[NSImage alloc] initWithSize:stringSize] autorelease];
[image lockFocus];
NSRect drawRect = NSMakeRect(0,0,stringSize.width,stringSize.height);
[str drawInRect:drawRect];
[image unlockFocus];
现在的问题是,使用双显示器配置,如果我保持视网膜显示器打开,字符串被损坏(我得到一半的字符串被绘制),而只需关闭我的视网膜显示器并仅使用我的影院显示器,字符串绘制正确。这就像NSImage从视网膜显示器获取默认上下文和一些缩放因子。
你有任何提示吗?
谢谢!
答案 0 :(得分:0)
好的,我会保留这个以供将来参考,即使有关于显示覆盖相同方面的NSImage的内容。
无论您的主要显示器是什么,但似乎NSGraphicContext都附带了一个仿射变换,它将x 2相乘以解决视网膜分辨率问题。
在使用以下内容绘制到NSImage之前,您只需要重置仿射变换
NSAffineTransform *trans = [[[NSAffineTransform alloc] init] autorelease];
[trans set];