Redimentioner une image sans la couper

ccoolccool Membre

Bonjour, j'ai un prolème j'ai une image que je voudrais redimmentionner, le code fonctionne bien sur ce qui est de la redimention mais je voudrais qu'elle garde la même forme que l'originale parce que dans le code que j'ai mit ça prend le milieu ça compte le nombre de pixel et ça coupe ...


Savez comment faire pour ne pas qu'elle se coupe ?


merci



_image1.frame = CGRectMake(_image1.center.x, _image1.center.y, 193, 141);


Réponses

  • AliGatorAliGator Membre, Modérateur

    Ouah...


     


    Alors :


     


    1) Là  ton code ne "redimensionne pas une image" il change la frame de l'UIImageView qui affiche l'image. L'objet UIImage fait toujours la même taille (même résolution en pixels, tu gardes l'original), c'est l'UIImageView qui l'affiche qui va changer de taille. Un peu comme si dans Aperçu, tu changeais juste l'échelle d'affichage à  50%, sans pour autant demander de redimensionner l'image réellement et la resauver.


     


    2) Les Magic Numbers, c'est mal


     


    3) Normal que ça prenne le milieu de l'image, c'est explicitement ce que tu demandes avec _image1.center


     


    4) Regarde les propriétés contentMode de UIView, qui vont affecter la façon dont le contenu de la UIView (en l'occurrence de la UIImageView) est redimensionné, en gardant les proportions ou pas selon ce que tu demandes.


  • ccoolccool Membre

    ok, merci AliGator :) je vais voir du coté de contentMode 


  • ccoolccool Membre

    Merci, j'ai donc mit 



    _image1.contentMode = UIViewContentModeScaleAspectFit;


    en plus du code précédent :)


  • ccoolccool Membre

    sinon tu as dit AliGator 



    2) Les Magic Numbers, c'est mal



    c'est quoi les Magic Numbers ? les nombres comme 193, 141 que j'ai mit dans mon CGRectMake ?


  • AliGatorAliGator Membre, Modérateur
    mai 2013 modifié #6
  • DrakenDraken Membre
    mai 2013 modifié #7
    Oui ! Les nombres magiques sont les chiffres que l'on trouve ici et là  dans le code, sans trop comprendre leurs significations.


    à‰dit : Grrrr .. Encore grillé par Turbo-Ali !
  • jpimbertjpimbert Membre
    mai 2013 modifié #8


    sinon tu as dit AliGator 


    c'est quoi les Magic Numbers ? les nombres comme 193, 141 que j'ai mit dans mon CGRectMake ?




     


    Il suffit de lire Wikipedia. Ali utilise la deuxième définition mentionnée dans wikipedia "une constante non nommée ou mal documentée" 


     


    (Trois d'un coup, et je suis encore le dernier !)


  • ccoolccool Membre

    D'accord merci, je vais eesayer de corriger ça 


  • AliGatorAliGator Membre, Modérateur

    Idéalement, tu devrais plutôt utiliser une constante pour la largeur et la hauteur, voire juste une constante pour la largeur, et calculer la hauteur en fonction de ce qui est nécessaire (règle de 3 pour garder l'aspect ratio de ton image, en utilisant la constante de largeur + les dimensions de l'image avec _image1.image.size pour le calcul, typiquement), ou un truc comme ça.


     


    Comme ça tu comprendras quand tu vas relire ton code d'où sortent ces chiffres, si tu dois les réutiliser autre part dans ton code tu ne risques pas d'oublier de les changer ou de faire une erreur de copie, si tu changes d'image un jour et qu'elle n'a pas la même taille ça va s'adapter, si tu as besoin de changer la valeur de la constante de largeur, le reste va s'adapter sans que tu sois obligé de réfléchir à  quelle valeur dépend de quelle autre et lesquelles il faut changer sans en oublier...


  • ccoolccool Membre

    Ah oui, je comprends mieux maintenant, c'est vrai que je ne pense jamais au cas où je change d'image ....


    sinon ça compte pas en tant que magic number si je fais ça ?



    _image1.frame = CGRectMake(_image1.center.x, _image1.center.y, _image1.frame.size.width/2, _image1.frame.size.height/2);

Connectez-vous ou Inscrivez-vous pour répondre.