À tous d'experts graphiques, je me demandais quelle de ces deux méthodes est préférable à redimensionner un uiimage:
Le premier que j'ai rencontré est simple et populaire et est le suivant: P>
-(UIImage *)resizeImage:(UIImage *)image width:(CGFloat)resizedWidth height:(CGFloat)resizedHeight { CGImageRef imageRef = [image CGImage]; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef bitmap = CGBitmapContextCreate(NULL, resizedWidth, resizedHeight, 8, 4 * resizedWidth, colorSpace, kCGImageAlphaPremultipliedFirst); CGContextDrawImage(bitmap, CGRectMake(0, 0, resizedWidth, resizedHeight), imageRef); CGImageRef ref = CGBitmapContextCreateImage(bitmap); UIImage *result = [UIImage imageWithCGImage:ref]; CGContextRelease(bitmap); CGImageRelease(ref); return result; }
4 Réponses :
C'est une approche de haut niveau et de bas niveau. p>
Quel est le meilleur? Dépend de votre objectif. p>
L'approche de haut niveau est plus lisible (pour moi), peut-être que l'approche de bas niveau est une nanoseconde plus rapide (n'a pas testé cela). P>
Il est difficile de juger des algorithmes ... P>
Approche de faible niveau = maintenir la qualité mieux après le redimensionnement? @à M
Le second est le fil sûr. P>
Pourquoi cela est-il allumé? 1: Parce que la déclaration est fausse? 2: Parce que le filetage est irellant -> ce n'est pas le cas. Si vous souhaitez une application haute performance, mettre en place des tâches de redimensionnement dans un autre thread est une bonne approche.
C'est une réponse assez tardive, mais je vais aller de l'avant et l'ajouter de toute façon. P>
J'ai trouvé des différences comportementales entre les deux méthodes, outre Prestanda. P>
Dans une application photo de la mienne, j'ai une vue personnalisée de caméra qui envoie une image prise à une éditeur d'image personnalisée. Dans l'application, les vues personnalisées Camera / Editor sont exclusives de paysage. Cependant, la fenêtre de la caméra natale elle-même elle n'est pas. P>
Donc, chaque fois qu'une photo est arrivée en mode portrait, le résultat final est déformé. Ces distorsions sont facilement manipulées en retournant la largeur et la hauteur, chaque fois que la largeur La première méthode des deux méthodes ci-dessus (le simple) a entraîné une image tournée à 90 degrés et toujours déformée. Le second, cependant, a redimensionnement l'image parfaitement! P>
Je suppose que cela a quelque chose à voir avec le comportement graphique basé sur le contexte. La deuxième méthode n'utilise pas ce contexte et ça marche parfaitement dans mon cas. P>
Il existe des façons vraiment différentes que vous voudrez peut-être redimensionner une image. Même si le cas où vous avez une nouvelle largeur et une nouvelle hauteur, vous voudrez peut-être redimensionner l'image à une nouvelle taille et ignorer les proportions, soit à l'échelle de l'image proportionnellement et récolter une nouvelle taille. P>
Il y a un projet qui a une API propre pour le faire: https://github.com/mustangostang/mustangostang/ Uiimage-redimensionner . Il utilise la première approche: -) p>