/ / NSImage lockFocus и NSString размер на дисплея на ретината - object-c, cocoa, core-text

NSImage lockFocus и NSString размер на ретината дисплей - цел-c, какао, ядро-текст

Изправен съм пред странен проблем, рисувам вътре в 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];