Peu importe ce que je fais, je n'arrive pas à comprendre pourquoi mes images continuent à être floues sur les écrans iOS. Peu importe que ce soit celui que j'ai créé dans un éditeur d'image ou un code de dessin, mais j'ai pensé que le code rendrait le problème beaucoup plus facile à parsingr. Je sais que si la ligne fait 1 pixel de large, elle apparaîtra floue, mais j'ai essayé plusieurs tailles de largeur de ligne avec des résultats similaires. Que puis-je faire pour m'assurer que mes charts sont nets?
UIGraphicsBeginImageContext(CGSizeMake(1000, 1000)); UIBezierPath *bezier = [UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 1000, 1000)]; [[UIColor greenColor]set]; [bezier fill]; [[UIColor blackColor]set]; bezier = [UIBezierPath bezierPath]; [bezier setLineWidth:1.5]; //I sortinged .5, 1, 1.5, & 2 with similar results [bezier moveToPoint:CGPointMake(450, 500)]; [bezier addLineToPoint:CGPointMake(500, 400)]; [bezier addLineToPoint:CGPointMake(550, 500)]; [bezier closePath]; [bezier stroke]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
UIGraphicsBeginImageContext
:
… équivaut à appeler la fonction
UIGraphicsBeginImageContextWithOptions
avec le paramètre opaque défini surNO
et un facteur d'échelle de1.0
.
Cependant, UIGraphicsBeginImageContextWithOptions
définit son paramètre d' scale
comme:
échelle
Le facteur d'échelle à appliquer à l'image bitmap. Si vous spécifiez une valeur de0.0
, le facteur d'échelle est défini sur le facteur d'échelle de l'écran principal du périphérique.
Donc, votre utilisation de UIGraphicsBeginImageContextWithOptions
crée un context avec une échelle de 1.0
. C'est le cas par exemple de l'iPad Mini de l'année dernière, mais tous les appareils de la class rétina ont une échelle «native» de 2.0
– deux pixels par point logique. UIGraphicsBeginImageContextWithOptions
introduit le cas particulier de 0.0
pour que vous n'ayez pas à vous [[UIScreen mainScreen] scale]
d'get le bon numéro pour cet appareil (bien que [[UIScreen mainScreen] scale]
soit un moyen facile).
UIGraphicsBeginImageContext(CGSizeMake(1000, 1000))
donc votre appel sortant en UIGraphicsBeginImageContext(CGSizeMake(1000, 1000))
en:
UIGraphicsBeginImageContextWithOptions(CGSizeMake(1000, 1000), NO, 0.0)
Sinon, le context que vous créez aura un quart de pixels de plus que l'écran dans l'espace correspondant.