7
votes

Mon image pivotée n'a pas d'arêtes vives

Je tournois mon image avec le code suivant: xxx

mais il n'a pas d'arêtes vives, est-ce que quelqu'un connaît une solution pour cela?

Voici le Image I Get:

Entrez la description de l'image ici


0 commentaires

6 Réponses :


1
votes

Chaque fois que vous vous transformez sur une image (sauf par incréments de 90 °), il va causer des bords légèrement plus doux en raison d'une interpolation de pixels.


1 commentaires

Oke, mais je ne pense pas que mon image a de légers bords plus doux, il a vraiment l'air laids!, Pourriez-vous jeter un coup d'œil à l'image et dites-moi si vous pensez que c'est normal? J'ai inclus le lien dans ma question.



2
votes

Les bords de l'image lui-même ont l'air déchiquetés car ils sont placés directement dans une grille de pixels et ne sont pas interpolés. Interpolation de voisin la plus proche est le type d'interpolation le plus simple, où si vous avez la grille de pixel A et Vous déplacez votre image sur Pixel Grid B, les pixels de la grille B sont choisis en choisissant simplement le pixel le plus proche de la grille A. Autres formes d'interpolation Choisissez une moyenne pondérée des pixels les plus proches pour arriver à la valeur Pixel de la grille B. / p>

Votre image, avec ses bords déchiquetés, on dirait qu'il utilise l'interpolation voisine la plus proche, qui peut être le type d'interpolation par défaut sur une transformation affine sur un iPhone.

Lorsque vous utilisez un autre système d'interpolation autre que celui du voisin le plus proche, vous obtiendrez aliasing effets, où le sous-échantillonnage n'est pas parfait lorsque vous transférez d'une grille de pixels à une autre. Cet effet fait que les arêtes dans l'image lui-même semblent bouleverses qu'elles ne le feraient autrement.


3 commentaires

Merci pour votre explication, mais savez-vous comment je peux le faire dans l'objectif c pour l'iPhone.


Peut-être essayer de définir cginterpolationqualité à kcginterpolationhigh


Avez-vous un exemple sur Ho pour définir cette valeur. J'ai juste mon image d'envisager avec un uiimage à l'intérieur.



2
votes

Ajoutez simplement une bordure transparente 1px à votre image

CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
UIGraphicsBeginImageContext( imageRect.size ); 
[image drawInRect:CGRectMake(1,1,image.size.width-2,image.size.height-2)];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();


0 commentaires

12
votes

Utilisation de la calayeuse UiImageView pour rasteriser l'image fournira la meilleure antialiasing.

imageView.layer.shouldRasterize = YES;


1 commentaires

Cela a fonctionné parfait pour moi. Jaggies fixes sur une couleur d'arrière-plan UIView avec une couleur d'arrière-plan, tourné à quelques degrés.



0
votes

Il existe une clé que vous pouvez définir dans Info.Plist qui permet une antialiasing des bords: UIViewedgeAntialiasing.

Comme décrit dans la réponse suivante: Lorsque je fais pivoter un UIImageView avec la propriété Transformer, les bords pixellate


0 commentaires

0
votes

la solution la plus simple:

ajoutez simplement cette paire de la valeur de clé à votre info.Plist: UIViewedgeAntialiasing défini sur Oui.

https://stackoverflow.com/a/12066215/1469060


0 commentaires