Question

Après avoir changé le basesdk de mon projet en 10.6, j'ai remarqué que mon texte dessiné personnalisé est différent (regardez les images: le même code pour le dessin)

Sous 10,5 Basesdk:image1

Sous 10,6 Basesdk:image2

Je dessine avec [((nsstring *) mystring drawinrect: myrect withattributes: myattributes].

myAttributes = [[NSMutableDictionary alloc] initWithObjectsAndKeys: [NSColor myColor], NSForegroundColorAttributeName, [NSFont systemFontOfSize:18], NSFontAttributeName, paragraphStyle, NSParagraphStyleAttributeName, shadow, NSShadowAttributeName, nil];

Quelle est la raison d'une telle différence, ou simplement comment réduire l'épaisseur de la police? J'ai essayé de réduire l'épaisseur de

[NSFontManager convertWeight:NO ofFont:font]

Mais ça ne semble pas beaucoup mieux ...

Merci d'avance.

Était-ce utile?

La solution 2

Maintenant, je sais la raison pour laquelle cela se produit et la correction de ce problème: semble qu'avec 10.6 a été ajouté l'option de lissage LCD de police, qui est activée dans les préférences -> Apparence -> "Utilisez le lissage de la police LCD lorsqu'il est disponible" comme case qui est cochée par défaut.

C'est pourquoi après avoir changé le Basesdk du projet en 10.6, les textes de l'application sont devenus lissés de style LCD et ayant l'air mauvais.

Ainsi, la correction du problème dans le code consiste à modifier les options de lissage dans le contexte graphique avant nos dessins:

CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetShouldSmoothFonts(context, NO);

La documentation de cette méthode nous indique que ce paramètre fait partie de l'état graphique, donc si vous ne souhaitez pas modifier cette option dans d'autres dessins de police, vous devez restaurer l'état graphique.

Merci à @NSGod pour avoir trouvé la raison de ce problème.

Autres conseils

Si nous faisons un zoom avant et examinons de près les deux images, nous remarquerons une différence immédiate (au moins je le fais):

enter image description here

Le texte de l'image supérieure utilise le lissage des polices de style CRT, tandis que le texte de l'image inférieure utilise le lissage de la police de style LCD moyen. (Les 3 styles du lissage de la police LCD introduiront des moulages de couleurs dans les pixels anti-aliasés).

Nous aurions besoin de plus d'informations sur votre configuration de test pour pouvoir dire pourquoi cela se produit. Sous quelle (s) version (s) d'OS X testez-vous cela? Par exemple, votre application a-t-elle été construite contre le SDK 10.6 avec une cible de déploiement de 10,5, l'image supérieure a été prise lors des tests sous OS X 10.5.x (sur la même machine), et l'image inférieure a été prise lors des tests sous 10.6.x ? Ou, tous les tests ont-ils été effectués dans Mac OS X 10.6.x, et la construction contre le SDK de 10,5 a entraîné l'image supérieure, et la construction contre le SDK de 10,6 a entraîné l'image inférieure? Quel modèle Mac utilisez-vous? Quel type d'écran LCD ou CRT externe avez-vous connecté, le cas échéant?

Juste quelques idées, sans avoir les informations demandées ci-dessus. Le style de lissage de police par défaut est CRT en 10.5, je crois, et 10.6 par défaut est "automatique". Donc, si vous avez un système avec un écran LCD et que vous testiez moins de 10,5, mais que vous n'avez jamais changé le style de lissage des polices à partir du style CRT par défaut, vous obtiendrez une image comme la partie supérieure. Si vous êtes ensuite passé à 10.6 sur le même système, il est possible que le 10 10.6 a détecté automatiquement votre écran LCD et a utilisé le lissage de la police de style LCD moyen, ce qui entraînerait le texte "plus lourd" dans l'image inférieure .

Une autre chose à garder à l'esprit est que la valeur de lissage des polices est stockée à titre d'hôte. Par exemple, sur ma machine, le AppleFontSmoothing La valeur est stockée dans ~ / bibliothèque / préférences / byhost / .globalPreferences. #########. Plist, où le ########## est votre uuid matériel. Je suppose qu'il est possible qu'il y ait 2 valeurs différentes stockées pour différentes configurations d'hôtes.

Vous obtenez ce que vous demandez

[NSFont systemFontOfSize:18]

Ce sont probablement des polices subtilement différentes entre 10,5 et 10,6. Un graphiste est devenu fou pour une raison quelconque.

Qu'obtenez-vous si vous enregistrez la sortie de [NSFont systemFontOfSize:18]. Est-ce différent entre 10.5 et 10.6?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top