Question

Je sens ce n'est pas une tâche facile, mais je dois combiner ou aplatir un UIImageView avec une autre vue UIImage couché au-dessus. Par exemple: J'ai deux UIImageViews. L'un d'eux a une UIImage d'un champ d'herbe (1200 x 1200 pixels). L'autre est un UIImage de basket-ball (128 x 128 pixels), et il est positionné au-dessus de l'image du champ d'herbes, de telle sorte que le basket-ball semble être sur le terrain herbeux. Je veux être en mesure de sauver les UIImageViews superposés en un seul fichier image à mon album photo qui signifie que je vais devoir combiner les deux images en quelque sorte. Comment y parvenir? (NOTE:. Prendre une capture d'écran (320 x 480 pixels) ne serait pas une solution acceptable que je désire préserver la taille de 1200 x 1600 pixels

QUESTION:
Comment puis-je aplatir plusieurs UIImageViews en une seule et SAVE l'image résultante, tout en préservant la taille / résolution.

Était-ce utile?

La solution

Cela prend une vue et fait un UIImage hors de lui. Tout point de vue et il subviews sera « aplati » dans un UIImage que vous pouvez afficher ou enregistrer sur le disque.

  - (UIImage*)imageFromView{

    UIImage *image;

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

    return image;

}

Autres conseils

Pourquoi ne pas vous dessinez UIImages d'origine dans un tampon de fond au-dessus de l'autre, puis d'écrire une image combinée à un fichier? Voici un exemple comment vous pouvez dessiner deux images pour le même tampon:

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top