J'ai besoin de diviser une image en 9 pièces par programmation. Des suggestions sur la façon de faire cela? p>
3 Réponses :
Il y a beaucoup de façons de trancher et de couper une image mais ici en est un. Il utilise Quartz pour couper une image en 9 fractions de taille égale. Remarquez qu'il ne gère pas les images tournées (par là, je veux dire des images avec imageOrientation! = 0) mais il devrait vous aider à démarrer:
+(NSArray *)splitImageInTo9:(UIImage *)im{ CGSize size = [im size]; NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:9]; for (int i=0;i<3;i++){ for (int j=0;j<3;j++){ CGRect portion = CGRectMake(i * size.width/3.0, j * size.height/3.0, size.width/3.0, size.height/3.0); UIGraphicsBeginImageContext(portion.size); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextScaleCTM(context, 1.0, -1.0); CGContextTranslateCTM(context, 0, -portion.size.height); CGContextTranslateCTM(context, -portion.origin.x, -portion.origin.y); CGContextDrawImage(context,CGRectMake(0.0, 0.0,size.width, size.height), im.CGImage); [arr addObject:UIGraphicsGetImageFromCurrentImageContext()]; UIGraphicsEndImageContext(); } } return [arr autorelease]; }
Cela permettra d'obtenir les images de bas en haut puisque pour CCIMAGE, le (0,0) est inférieur gauche et non supérieur à gauche. Donc, pour obtenir des images de haut à gauche, modifiez votre code pour lire la partie CGRRECT = CGRecture (i * Taille.Width / 3.0, (2-J) * Taille.Height / 3.0, taille.Width / 3.0, taille. .Height / 3.0); code>
Nice attrape nimeshdesai. Maintenant que vous mentionnez, je pense que j'ai testé cela avec une image symétrique. Je vais exécuter un test rapide et modifierai en conséquence. Acclamations!
N'importe quand. J'ai testé votre code pour un projet et j'ai trouvé un bogue, la pensée vous permettrait de savoir :)
Le code ci-dessous est également une solution qui détecte la pièce de l'image qui a été tartée. L'idée est de prendre un uImage et d'utiliser cgimagecreatewithImageIrect pour décrocher des morceaux. De la pièce recadrée crée une nouvelle uiimage et placez-la dans un UIImageView. Pour que le geste du robinet fonctionne, je devais placer l'UIImageView dans un UIView. Enfin, fournissez le geste et une étiquette unique de sorte que la pièce puisse être identifiée lors de la prise en charge.
- (void)loadView { UIView* root = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; UIImage* whole = [UIImage imageNamed:@"whole.jpg"]; //I know this image is 300x300 int partId = 0; for (int x=0; x<=200; x+=100) { for(int y=0; y<=200; y+=100) { CGImageRef cgImg = CGImageCreateWithImageInRect(whole.CGImage, CGRectMake(x, y, 100, 100)); UIImage* part = [UIImage imageWithCGImage:cgImg]; UIImageView* iv = [[UIImageView alloc] initWithImage:part]; UIView* sView = [[UIView alloc] initWithFrame:CGRectMake(200-x, 200-y, 100, 100)]; [sView addSubview:iv]; [iv release]; UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]; tap.numberOfTapsRequired = 1; [sView addGestureRecognizer:tap]; [tap release]; sView.tag = partId; [root addSubview:sView]; [sView release]; partId++; CGImageRelease(cgImg); } } self.view = root; } - (void)tap:(UITapGestureRecognizer*)gesture { NSLog(@"image tap=%d", gesture.view.tag); }
super, vous avez raison, comment puis-je donner un mouvement à ces images d'images
La position d'un UIView est définie avec les propriétés .frame et .Center. L'animation de base pourrait valoir la peine d'être considérée comme aussi.
UIView ressemble à Static Comment puis-je les modifier qui sont mobiles.
@MAHESHBABUBU: Vous devriez poser une nouvelle question à ce sujet.
@Évan: Je ne pense pas que vous ayez obligé de placer l'imageView en vue de détecter des gestes. Mais vous devez activerAserActionActionAction. Parce que c'est comme standard défini sur NON dans un image d'image. ;-)
@Évan: peut me dire comment puis-je faire une vision mobile?
Code suivant la tranche d'image en fonction des paramètres, ajoutez des bordures et des affichages: lien de téléchargement de projet: https://github.com/bpolat/image-slicer p> Utilisation des échantillons et résultat: p> [auto getImagesFromImage: [uiImage imagée : @ "1.png"] RANDROW: 4 avec Column: 4]; p> p> p>
Et si j'ai besoin de casser cette image, puis changez d'images ??