2011-01-05 2 views
1

Je voudrais savoir si quelqu'un peut me pointer dans la bonne direction concernant les frameworks/méthodes à utiliser lors du remplacement d'un bloc de pixels dans une image avec un autre bloc de pixels. Par exemple, disons que j'ai une image simple de couleur entièrement rouge et que je considère ma taille de bloc de pixels comme 5x5 pixels. Maintenant, tous les 3 blocs, je veux remplacer le 3ème bloc par un bloc de couleur bleue (5x5 pixels) donc que cela se traduirait par une image rouge avec des blocs bleus apparaissant tous les 3 blocs rouges.iPhone - Remplacer un bloc de pixels dans une image avec un autre bloc de pixls

J'ai trouvé des informations concernant le remplacement des pixels mais j'essaie de comprendre comment déterminer et traiter les blocs de pixels. Tout conseil serait apprécié .. et tout code serait un rêve humide.

+0

Où sont les pixels? Un fichier image que vous traitez, ou dans une vue en direct sur l'écran? –

+0

En direct sur l'écran. – Zigglzworth

Répondre

1

Même si cela peut sembler une simple question, ce n'est pas facile de faire quelque chose comme ça. Vous avez besoin de beaucoup d'informations générales pour que tout se passe bien. Cela dépend aussi de l'origine de l'image et de ce que vous voulez en faire.

Je ne vais pas vous donner un exemple de travail, mais voici quelques conseils:

lecture dans une image:

UIImage *img = [UIImage imageNamed:@"myimage.png"]; 
// make sure you added myimage.png to your project 

Créer votre propre « contexte graphique » pour dessiner sur:

UIGraphicsBeginImageContext(CGSizeMake(480.0f, 320.0f)); // the size (width,height) 
CGContextRef ctx = UIGraphicsGetCurrentContext(); 

Peinture de votre image dans votre contexte (actuel):

[img drawAtPoint:CGPointMake(0.0f, -480.0f)]; // (draws on current context) 

Faire un autre tableau:

CGContextBeginPath(ctx); // start a path 
CGContextSetRGBStrokeColor(ctx,1,0,0,1); // red,green,blue,alpha with range 0-1 
CGContextMoveToPoint(ctx,50,0); // move to beginning of path at point (50,0) 
CGContextAddLineToPoint(ctx,100,100); // add a line to point (100,100) 
CGContextStrokePath(ctx); // do the drawing 

Transformer le contexte bitmap à une image encore:

UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext(); 

Et puis, que ce soit:

Afficher l'image au public, à partir d'un contrôleur de vue:

[self.view addSubview:[[[UIImageView alloc] initWithImage:resultImage] autorelease]]; 

Ou écrire l'image jpeg:

NSData *imagedata = UIImageJPEGRepresentation(img,0.8); // 0.8 = quality 
[imagedata writeToFile:filename atomically:NO]; 

Ou comme PNG:

NSData *imagedata = UIImagePNGRepresentation(img); 
[imagedata writeToFile:filename atomically:NO]; 

Pour ces derniers, vous devez avoir un nom de fichier, ce qui est pas si trivial soit (compte tenu de l'environnement de téléphone que vous vivez dans). C'est un autre sujet sur lequel vous trouverez beaucoup, rechercher des choses comme:

NSArray *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *filename = [[path elementAtIndex:0] stringByAppendingPathComponent:@"myimage.png"]; 

Voici les grandes lignes, je pourrais avoir fait quelques erreurs, mais cela devrait vous y aller au moins.

+0

En savoir plus: http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html et beaucoup d'autres docs apple. – mvds

+0

Le bloc de pixels réel est donc créé avec: UIGraphicsBeginImageContext (CGSizeMake (480.0f, 320.0f)); CGContextRef ctx = UIGraphicsGetCurrentContext(); ? – Zigglzworth

+0

Eh bien, c'est un moyen. Une autre serait de commencer avec un contexte bitmap, en utilisant 'CGContextRef ctx = CGBitmapContextCreate (baseAddress, largeur, hauteur, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);' mais comme vous voyez cela nécessite beaucoup plus d'efforts (vous avez besoin pour allouer la mémoire et déterminer les paramètres) mais cela fait que vous pouvez réellement éditer au niveau du pixel en mémoire. Vous pouvez alors 'CGImageRef cgimage = CGBitmapContextCreateImage (ctx);' pour obtenir un 'cgimage', que vous pouvez utiliser pour créer un' UIImage'. – mvds

Questions connexes