Je voudrais créer une nouvelle UIImage en recadrant l'image dans une UIImageView. Par exemple, dans l'image ci-dessus, je veux une nouvelle UIImage de la zone délimitée en vert. J'ai trouvé du code pour faire cela, normalement cela ressemble à quelque chose comme ceci (comme une catégorie d'UIImage) :
- (UIImage *)croppedImage:(CGRect)bounds {
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
return croppedImage;
}
C'est parfaitement logique. CEPENDANT, mon UIImageView est en contentMode "aspect fit". Il semble que cela complique les calculs CGRect pour CGImageCreateWithImageInRect et je n'ai pas réussi à trouver la bonne solution.
Je suppose que je dois appliquer au rectangle vert les mêmes transformations que celles effectuées sur l'image ?
AUSSI : J'ai trouvé cette autre question ici ( Comment connaître la taille de l'image après avoir appliqué l'ajustement de l'aspect de l'image dans une UIImageView ? ), qui semble montrer une façon brute d'obtenir la taille, mais je ne suis toujours pas sûr de la façon dont cela s'intègre dans une situation de recadrage.
Des idées ?
EDIT : Dans mon cas, j'ai littéralement un carré comme indiqué ci-dessus dessiné dans une vue superposée sur l'UIImageView. Donc, tout en sachant que je recadre l'UIImage (à l'intérieur de la UIImageView), je dois d'une manière ou d'une autre modifier le CGRect vert de façon à ce qu'il " corresponde " à la transformation effectuée lorsque " aspect fit " est appliqué. Par exemple, si je laisse mon UIImageView en mode " supérieur gauche ", tout fonctionne bien, car il existe une correspondance 1:1 entre l'UIImage sous-jacente et l'UIImageView. Le problème du mode " haut gauche " est que l'image entière ne s'affiche pas toujours, car elle peut être plus grande que mon UIImageView.