Domanda

Ho una vista con uiimageview Assegno questa immagine uiimageview dalla fotocamera ... ora voglio fare qualche disegno sull'immagine .... usando coregraphics. Voglio fare qualcosa del genere ... selezionare un'area toccando e disegnare una linea quando la linea si unisce a qualcosa come un cerchio o qualsiasi forma ... voglio cambiare quella particolare area in qualcos'altro per esempio cambiare colore lì. trasformarlo in scala di grigi .. fino ad ora sono in grado di disegnare una linea ... ecco un immagine della linea tracciata su una vista uiimage ...

 alt text

ma non riesco a capirlo come faccio a disegnare l'immagine di imageview ... significa come modificare l'immagine di imageview ???

anche io voglio ripristinare l'immagine quando si fa clic sul pulsante Cancella o qualcosa come annulla ... qualcuno sa come farlo?

e

come posso creare un rettangolo quando faccio clic sul pulsante di ritaglio per spostare il rettangolo in qualsiasi punto dello schermo ... e quindi premere il pulsante per ritagliare l'immagine ... e quindi salvare l'immagine ritagliata ..

È stato utile?

Soluzione

Questi sono i passaggi:

  1. Crea un CGBitmapContext corrispondente allo spazio colore e alle dimensioni dell'immagine.
  2. Disegna l'immagine in quel contesto.
  3. Disegna quello che vuoi sopra l'immagine.
  4. Crea una nuova immagine dal contesto.
  5. Elimina il contesto.

Ecco un metodo che prende un'immagine, disegna qualcosa sopra di essa e restituisce un nuovo UIImage con contenuti modificati:

- (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;
}

Per ripristinare la vecchia immagine, tieni semplicemente un riferimento ad essa.

La cosa del ritaglio non è correlata a quanto sopra e dovresti creare una nuova domanda per questo.

Altri suggerimenti

Una soluzione molto più semplice sarebbe

(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;
}

Dai un'occhiata a Panoramica di Quartz 2D per informazioni sull'uso di Quartz 2D su iPhone.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top