Pregunta

Tengo una vista con uiimageview. Asigno esta imagen de uiimageview por cámara ... ahora quiero hacer un dibujo sobre la imagen ... usando coregraphics. Quiero hacer algo como esto ... seleccionar un área tocando y dibujar línea cuando la línea se une a algo como un círculo o cualquier forma ... quiero cambiar esa área en particular a otra, por ejemplo, cambiar el color allí. Convertir eso en escala de grises ... hasta ahora puedo dibujar una línea ... aquí hay un imagen de línea dibujada sobre una vista de imagen ...

 texto alternativo

pero no puedo entender cómo dibujar en la imagen de imageview ... ¿cómo modificar la imagen de imageview ???

también quiero restaurar la imagen cuando hago clic en el botón Borrar o algo así como deshacer ... ¿alguien sabe cómo lograr esto?

y

¿Cómo creo un rectángulo cuando hago clic en el botón de recorte? Muevo el rectángulo a cualquier parte de la pantalla ... y luego presiono el botón para recortar la imagen ... y luego guardar la imagen recortada ...

¿Fue útil?

Solución

Estos son los pasos:

  1. Cree un CGBitmapContext que coincida con el espacio de color y las dimensiones de la imagen.
  2. Dibuja la imagen en ese contexto.
  3. Dibuja lo que quieras encima de la imagen.
  4. Crear una nueva imagen desde el contexto.
  5. Desechar el contexto.

Aquí hay un método que toma una imagen, dibuja algo sobre ella y devuelve un nuevo UIImage con contenido modificado:

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

Para restaurar la imagen anterior, solo mantenga una referencia a ella.

El tema del recorte no está relacionado con lo anterior y debe crear una nueva pregunta para eso.

Otros consejos

Una solución mucho más fácil sería

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

Eche un vistazo a Descripción general de Quartz 2D para obtener información sobre el uso de Quartz 2D en iPhone.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top