Comment recadrer l'UIImage?
J'ai développer une application dans laquelle je traite l'image à l'aide de ses pixels mais, dans le traitement de l'image, il prend beaucoup de temps. Donc je veux des cultures UIImage (Seulement la partie centrale de l'image c'est à dire la suppression/croping bordé partie de l'image).J'ai la développer du code sont,
- (NSInteger) processImage1: (UIImage*) image
{
CGFloat width = image.size.width;
CGFloat height = image.size.height;
struct pixel* pixels = (struct pixel*) calloc(1, image.size.width * image.size.height * sizeof(struct pixel));
if (pixels != nil)
{
//Create a new bitmap
CGContextRef context = CGBitmapContextCreate(
(void*) pixels,
image.size.width,
image.size.height,
8,
image.size.width * 4,
CGImageGetColorSpace(image.CGImage),
kCGImageAlphaPremultipliedLast
);
if (context != NULL)
{
//Draw the image in the bitmap
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, image.size.width, image.size.height), image.CGImage);
NSUInteger numberOfPixels = image.size.width * image.size.height;
NSMutableArray *numberOfPixelsArray = [[[NSMutableArray alloc] initWithCapacity:numberOfPixelsArray] autorelease];
}
Comment je prendre(croping bordé à l'extérieur) de la partie médiane de UIImage?????????
Vous devez vous connecter pour publier un commentaire.
Essayer quelque chose comme cela:
Remarque: cropRect est plus petit rectangle avec le milieu de la partie de l'image...
J'étais à la recherche d'un moyen d'obtenir un arbitraire rectangulaire culture (ie., sous-image) d'une UIImage.
La plupart des solutions que j'ai essayé ne fonctionnent pas si l'orientation de l'image est rien mais UIImageOrientationUp.
Par exemple:
http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/
En règle générale, si vous utilisez votre iPhone appareil photo, vous aurez d'autres orientations comme UIImageOrientationLeft, et vous n'obtiendrez pas une bonne culture avec la ci-dessus. C'est à cause de l'utilisation de CGImageRef/CGContextDrawImage qui diffèrent dans le système de coordonnées à l'égard de UIImage.
Le code ci-dessous utilise l'INTERFACE utilisateur* méthodes (pas de CGImageRef), et j'ai testé avec haut/bas/gauche/droite orientée images, et il semble fonctionner à merveille.
UIGraphicsBeginImageContext
, etc est pour contourner cette limitation.UIGraphicsBeginImageContext
sur un seul thread à la fois. Les docs de l'état: "Crée une image graphique basée sur le contexte et rend le contexte actuel." Je crois que ce "contexte actuel" est global, et donc ne sont pas thread-safe. Mon appli de traiter plusieurs images à la fois, et j'ai eu des plantages lors de l'utilisation deUIGraphicsBeginImageContext
dans plusieurs threads, donc je suis passé à l'aide deCGContextRef
's qui sont thread-safe.Il serait finalement plus rapide, avec beaucoup moins de la création de l'image du sprite atlas, si vous pouviez définir non seulement l'image pour une UIImageView, mais aussi le haut à gauche décalage à l'affichage à l'intérieur de cette UIImage. C'est peut-être possible. Il serait certainement éliminer beaucoup d'efforts!
Pendant ce temps, j'ai créé ces fonctions utiles dans une classe utilitaire que j'utilise dans mes applications. Il crée une UIImage de la partie d'un autre UIImage, avec des options de rotation, échelle, et de le retourner à l'aide de la norme UIImageOrientation valeurs à spécifier. Le pixel de mise à l'échelle est conservée à partir de l'image d'origine.
Mon application crée beaucoup de UIImages lors de l'initialisation, et cela prend nécessairement du temps. Mais certaines images ne sont pas nécessaires jusqu'à un certain onglet est sélectionné. Pour donner l'apparence de chargement plus rapide j'ai pu créer dans un thread donné naissance au démarrage, juste attendre jusqu'à ce que ça fait lorsque cet onglet est sélectionné.
Ce code est aussi publié sur Le moyen le plus efficace de tirer partie d'une image dans iOS
Parce que j'avais besoin en ce moment, ici, c'est M-V 's code Swift 4:
Si vous voulez un portrait de la culture au centre de chaque photo.
Utiliser @M-V de la solution, & remplacer cropRect.
Je voulais être en mesure de culture d'une région, basée sur un rapport d'aspect, et de l'échelle pour une taille basée sur un extérieur de délimitation de l'étendue. Voici ma variante:
Il ya un couple de choses que j'ai trouvé confus, les préoccupations distinctes de recadrage et le redimensionnement. Le recadrage est traitée à l'origine de la rect que vous passez à drawInRect, et mise à l'échelle est gérée par la taille de la portion. Dans mon cas, j'avais besoin de relier la taille du recadrage rect sur la source, à ma sortie rect du tout le même aspect. Le facteur d'échelle est alors entrée /de sortie, et cela doit être appliqué à la drawRect (passé à drawInRect).
Une mise en garde est que cette approche suppose que l'image vous êtes le dessin est plus grand que l'image contexte. Je n'ai pas testé, mais je pense que vous pouvez utiliser ce code pour gérer le recadrage le zoom, mais en définissant explicitement le paramètre d'échelle à ladite paramètre d'échelle. Par défaut, UIKit applique un multiplicateur basé sur la résolution de l'écran.
Enfin, il convient de noter que cette UIKit approche est le plus haut niveau de CoreGraphics /Quartz et Core Image approches, et semble gérer l'image de questions liées à l'orientation. Il est également intéressant de mentionner que c'est assez rapide, la deuxième à la ImageIO, selon ce post ici: http://nshipster.com/image-resizing/
À l'aide de la fonction
Voici un exemple de code, utilisé à des fins différentes, mais les clips de ok.