Pregunta

Tengo la sensación de que esto no es una tarea fácil, pero tengo que combinar o acoplar un UIImageView con otra vista UIImage tumbado encima de ella. Por ejemplo: Tengo dos UIImageViews. Uno de ellos tiene un UIImage de un campo de hierba (1200 x 1200 píxeles). El otro es un UIImage de una pelota de baloncesto (128 x 128 píxeles), y se coloca por encima de la imagen del campo de hierba de tal manera que la pelota de baloncesto parece estar en el campo de hierba. Quiero ser capaz de guardar los UIImageViews superpuestos como un solo archivo de imagen a mi álbum de fotos que significa que tendrá que combinar las dos imágenes de alguna manera. ¿Cómo se puede lograr esto? (NOTA:. Tomar una captura de pantalla (320 x 480 píxeles) no sería una solución aceptable como deseo de conservar el tamaño de 1200 x 1600 píxeles

PREGUNTA:
¿Cómo puedo aplanar múltiples UIImageViews en uno y guardar la imagen resultante preservando al mismo tiempo el tamaño / resolución.

¿Fue útil?

Solución

Esto se lleva a cualquier punto de vista y hace una UIImage fuera de él. Cualquier punto de vista y es subvistas será "aplanado" en un UIImage que se puede mostrar o guardar en el disco.

  - (UIImage*)imageFromView{

    UIImage *image;

    UIGraphicsBeginImageContext(self.view.bounds.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;

}

Otros consejos

¿Por qué no acaba de dibujar UIImages originales en un búfer de fondo en la parte superior de uno al otro y luego escribir una imagen combinada a un archivo? A continuación se muestra un ejemplo de cómo se puede dibujar dos imágenes al mismo tampón:

CGImageRef bgimage = [bguiimage CGImage];
width = CGImageGetWidth(bgimage);
height = CGImageGetHeight(bgimage);

// Create a temporary texture data buffer
GLUbyte* data = (GLubyte *) malloc(width * height * 4);
assert(data);

// Draw image to buffer
CGContextRef ctx = CGBitmapContextCreate(data, width, height, 8, width * 4, CGImageGetColorSpace(image), kCGImageAlphaPremultipliedLast);
assert(ctx);

// Flip image upside-down because OpenGL coordinates differ
CGContextTranslateCTM(ctx, 0, height);
CGContextScaleCTM(ctx, 1.0, -1.0);

CGContextDrawImage(ctx, CGRectMake(0, 0, (CGFloat)width, (CGFloat)height), bgimage);

CGImageRef ballimage = [balluiimage CGImage];
bwidth = CGImageGetWidth(ballimage);
bheight = CGImageGetHeight(ballimage);

float x = (width - bwidth) / 2.0;
float y = (height - bheight) / 2.0;
CGContextDrawImage(ctx, CGRectMake(x, y, (CGFloat)bwidth, (CGFloat)bheight), ballimage);

CGContextRelease(ctx);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top