2010-10-12 18 views
2

Je rencontre des difficultés pour dessiner des lignes larges d'un pixel. Toutes les lignes sont parfaitement horizontales ou verticales (je ne dessine pas de lignes diagonales) mais elles ne dessinent pas correctement. On dirait qu'il dessine deux pixels à un alpha réduit. Sans doute en raison de l'antialiasing. J'ai cherché dans les docs et les forums et j'ai trouvé une déclaration disant qu'il n'y a "... aucun problème à dessiner des lignes horizontales et verticales d'un pixel de large ..." mais je ne sais pas exactement comment. Tous les pointeurs seraient les bienvenus.Comment dessiner des lignes horizontales et verticales d'un pixel de large dans Quartz?

Le code de dessin est simple:

else if ([[value entity].name isEqualToString:@"RTLine"]) { 

CGContextSetRGBStrokeColor(ctx, 0, 0, 0, 1); 
CGContextSetLineWidth(ctx, [[value valueForKey:@"thickness"] doubleValue]); 
CGContextMoveToPoint(ctx, [[value valueForKey:@"beginDrawLocationX"] doubleValue], 
          [[value valueForKey:@"beginDrawLocationY"] doubleValue]); 
CGContextAddLineToPoint(ctx, [[value valueForKey:@"endDrawLocationX"] doubleValue], 
           [[value valueForKey:@"endDrawLocationY"] doubleValue]); 
CGContextStrokePath(ctx); 

} 

Dans ce qui précède, « épaisseur » est égal à 1. je doubleValue au lieu de floatValue pour la conversion de int en float cas a été mushing la valeur à quelque chose de pas tout à fait 1 - ce n'était pas.

Répondre

3

Mon mauvais. Dès que j'ai posté ceci, j'ai trouvé la réponse dans le guide de référence de CGContext. tout ce que je devais faire est d'ajouter la ligne:

CGContextSetShouldAnitalias(ctx, 0); 

et le bingo! Tout est en paix ...

+0

+1 réponses personnelles sont bonnes. Vous pouvez également "accepter" votre propre réponse pour marquer cette question en réponse. – msw