Comment « » Aplatir plusieurs UIImageViews en un seul?
-
12-09-2019 - |
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.
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);