Изправен съм пред странен проблем, рисувам вътре в 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 за отговор № 1Добре, ще запазя това за бъдещи справки, дори има нещо за показването на NSImage, което покрива същия аспект.
Без значение какъв е основният ви дисплей, но изглежда, че NSGraphicContext идва с афинна трансформация, която умножава x 2, за да се справи с разделителната способност на ретината.
Просто трябва да нулирате афинните трансформации, преди да рисувате в NSImage с:
NSAffineTransform *trans = [[[NSAffineTransform alloc] init] autorelease];
[trans set];