Domanda

Ho la sensazione che questo non è un compito facile, ma ho bisogno di combinare o appiattire un UIImageView con un'altra vista UIImage sdraiato sopra di esso. Per esempio: ho due UIImageViews. Uno di loro ha un UIImage di un campo erboso (1200 x 1200 pixel). L'altro è un UIImage di un basket (128 x 128 pixel), ed è posizionato sopra l'immagine del campo erboso in modo tale che il basket appare sul campo erboso. Voglio essere in grado di salvare l'UIImageViews sovrapposti come un unico file di immagine per il mio album di foto che significa che ho bisogno di combinare le due immagini in qualche modo. Come questo essere realizzato? (NOTA:. Facendo una schermata (320 x 480 pixel) non sarebbe una soluzione accettabile come desidero preservare la dimensione di 1200 x 1600 pixel

DOMANDA:
Come posso appiattire multipli UIImageViews in uno e salvare l'immagine risultante, preservando la dimensione / risoluzione.

È stato utile?

Soluzione

Questo richiede qualsiasi visualizzazione e fa un'UIImage fuori di esso. Qualsiasi vista ed è subviews sarà "appiattita" in un UIImage che è possibile visualizzare o salvare su disco.

  - (UIImage*)imageFromView{

    UIImage *image;

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

    return image;

}

Altri suggerimenti

Perché non basta disegnare UIImages originali in un buffer di fondo sopra l'altro e poi scrive un'immagine combinata a un file? Di seguito è riportato un esempio di come è possibile disegnare due immagini per lo stesso buffer:

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top