Question

j’ai une vue avec uiimageview j’assigne cette image uiimageview par caméra .. maintenant je veux dessiner sur une image .... en utilisant coregraphics.Je veux faire quelque chose comme ça ... sélectionnez une zone en touchant et tracer une ligne lorsque la ligne rejoint quelque chose comme un cercle ou une forme quelconque .. je veux changer cette zone particulière en quelque chose d'autre, par exemple changer de couleur ici. Tourner cela en niveaux de gris .. jusqu'à maintenant, je suis en mesure de tracer une ligne ... voici un image de ligne tracée sur une vue uiimage ...

 alt text

mais je suis incapable de comprendre comment puis-je dessiner à l'image de imageview..moyenne comment modifier l'image de viewview ???

Je souhaite également restaurer l'image lorsque vous cliquez sur le bouton "Effacer" ou quelque chose comme "Annuler ...", quelqu'un sait comment y parvenir?

et

comment puis-je créer un rectangle lorsque vous cliquez sur le bouton de rognage? déplacez le rectangle n'importe où sur l'écran ... puis appuyez sur le bouton pour rogner l'image ... puis enregistrez l'image rognée ..

Était-ce utile?

La solution

Voici les étapes à suivre:

  1. Créez un CGBitmapContext correspondant à l'espace de couleur et aux dimensions de l'image.
  2. Dessinez l'image dans ce contexte.
  3. Dessinez ce que vous voulez en haut de l'image.
  4. Créez une nouvelle image à partir du contexte.
  5. Éliminer le contexte.

Voici une méthode qui prend une image, dessine quelque chose dessus et renvoie un nouvel UIImage avec un contenu modifié:

- (UIImage*)modifiedImageWithImage:(UIImage*)uiImage
{
    // build context to draw in
    CGImageRef image = uiImage.CGImage;
    CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
    CGContextRef ctx = CGBitmapContextCreate(NULL,
                                             CGImageGetWidth(image), CGImageGetHeight(image),
                                             8, CGImageGetWidth(image) * 4,
                                             colorspace, kCGImageAlphaPremultipliedLast);
    CGColorSpaceRelease(colorspace);

    // draw original image
    CGRect r = CGRectMake(0, 0, CGImageGetWidth(image), CGImageGetHeight(image));
    CGContextSetBlendMode(ctx, kCGBlendModeCopy);
    CGContextDrawImage(ctx, r, image);
    CGContextSetBlendMode(ctx, kCGBlendModeNormal);

    // draw something
    CGContextAddEllipseInRect(ctx, CGRectInset(r, 10, 10));
    CGContextSetRGBStrokeColor(ctx, 1.0f, 1.0f, 1.0f, 0.5f);
    CGContextSetLineWidth(ctx, 16.0f);
    CGContextDrawPath(ctx, kCGPathStroke);

    CGContextAddEllipseInRect(ctx, CGRectInset(r, 10, 10));
    CGContextSetRGBStrokeColor(ctx, 0.7f, 0.0f, 0.0f, 1.0f);
    CGContextSetLineWidth(ctx, 4.0f);
    CGContextDrawPath(ctx, kCGPathStroke);

    // create resulting image
    image = CGBitmapContextCreateImage(ctx);
    UIImage* newImage = [[[UIImage alloc] initWithCGImage:image] autorelease];
    CGImageRelease(image);
    CGContextRelease(ctx);

    return newImage;
}

Pour restaurer une ancienne image, conservez simplement une référence.

Le recadrage n’est pas lié à ce qui précède et vous devriez créer une nouvelle question à cet effet.

Autres conseils

Une solution beaucoup plus simple serait

(UIImage *) modifyImage:(UIImage *)inputImage
{
   UIGraphicsBeginImageContext(inputImage.size);
   [inputImage drawInRect:CGRectMake(0, 0, inputImage.size.width, inputImage.size.height);
   CGContextRef ctx = UIGraphicsGetCurrentContext();
   //Drawing code using above context goes here
   /*
    *
    */
   UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   return outputImage;
}

Consultez Présentation de Quartz 2D pour plus d'informations sur l'utilisation de Quartz 2D sur iPhone.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top