2009-09-29 4 views
0

Je veux obtenir seulement les pixels qui sont à l'intérieur d'une forme irrégulière .. en utilisant des graphiques de base non ouvertsGL. Il y a une image où j'ai dessiné une forme irrégulière.comment obtenir seulement des pixels de l'intérieur d'une forme irrégulière de uiimageview dans l'iphone?

alt text http://i33.tinypic.com/303enio.jpg

et voici le code de dessin

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    if(drawLineClicked) 
    { 
     UITouch *touch = [touches anyObject]; 
     if ([touch view] == EditImageView) 
     { 
     lastPoint = [touch locationInView:self.view]; 
     [self drawLines:10.0 andColorWithRed:1.0 Green:0.0 Blue:0.0 Alpha:1.0]; 
     [self.view setNeedsDisplay]; 
     currentPoint = lastPoint; 
     } 
    } 
} 


-(void)drawLines:(CGFloat)withWidth andColorWithRed:(CGFloat)red Green:(CGFloat)green Blue:(CGFloat)blue Alpha:(CGFloat)alpha 
{ 
UIGraphicsBeginImageContext(Image.size); 
    [EditImageView.image drawInRect:CGRectMake(0, 0, Image.size.width, Image.size.height)]; 
ctx = UIGraphicsGetCurrentContext(); 
CGContextSetLineCap(ctx, kCGLineCapRound); 
CGContextSetAllowsAntialiasing(ctx,TRUE); 
CGContextFlush(ctx); 
//sets the line width for a graphic context 
CGContextSetLineWidth(ctx,withWidth); 
//set the line colour 
CGContextSetRGBStrokeColor(ctx, red, green, blue, alpha); 
CGContextMoveToPoint(ctx, currentPoint.x, currentPoint.y);  
CGContextAddLineToPoint(ctx, lastPoint.x,lastPoint.y);  
CGContextStrokePath(ctx); 
EditImageView.image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
} 

Répondre

3

est ici juste jeter sur une idée:

Au lieu de tracer la ligne rouge directement sur l'image, je dupliquer l'image , ajoutez-le en tant que nouveau calque sur l'image originale et donnez-lui un masque totalement transparent (le nouveau calque est donc "invisible").

Ensuite, lorsque l'utilisateur trace la ligne rouge, utilisez-la pour créer un chemin en tant que masque sur le calque invisible. Lorsque le chemin est terminé, remplissez le chemin avec du noir (sur le masque), pour rendre cette partie totalement opaque. Vous pourriez alors redimensionner la couche supérieure (qui a été masquée) pour qu'elle soit le rectangle de délimitation du chemin tracé. Les pixels opaques sur le calque le plus haut seront alors ceux qui ont été délimités par le tracé tracé, et vous pourrez ensuite faire ce que vous voulez avec (dessinez-le dans un nouveau UIImage, etc.).

espoir qui fait sens ...

+1

pouvez-vous s'il vous plaît poster une source d'échantillon pour ce –

0

Jetez un oeil à mon vieux projet de code exemple ici: Cropped Image

Il est pour le cacao, pas Cocoa Touch, mais l'idée est la même. Vous pouvez recadrer une image en la composant en utilisant le mode de composition SourceIn.

+0

votre exemple de code est excellent.can vous me dire comment puis-je montrer la couleur palette sur iphone puis choisir une couleur –

+0

je suis un peu surpris qu'il ne semble pas être un sélecteur de couleur dans l'UIKit. Je suppose que tu devras en écrire un. – NSResponder

Questions connexes