Pergunta

Eu tenho um sentimento que este não é uma tarefa fácil, mas eu preciso combinar ou achatar um UIImageView com uma outra visão UIImage deitado acima dela. Por exemplo: Eu tenho duas UIImageViews. Um deles tem um UIImage de um campo gramado (1200 x 1200 pixels). A outra é uma UIImage de um basquetebol (128 x 128 pixels), e está posicionado por cima da imagem do campo relvado de tal maneira que o basquete parece ser no campo relvado. Eu quero ser capaz de salvar o UIImageViews sobrepostos como um único arquivo de imagem para o meu álbum de fotos que significa que vou precisar para combinar as duas imagens de alguma forma. Como isso seria feito? (NOTA:. Tomar um screenshot (320 x 480 pixels) não seria uma solução aceitável como eu desejo para preservar o tamanho de 1200 x 1600 pixels

PERGUNTA:
Como posso nivelar várias UIImageViews em um e salvar a imagem resultante, preservando o tamanho / resolução.

Foi útil?

Solução

Isso leva qualquer vista e faz uma UIImage fora dele. Qualquer visão e é subviews será "achatada" em um UIImage que você pode exibir ou salvar no disco.

  - (UIImage*)imageFromView{

    UIImage *image;

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

    return image;

}

Outras dicas

Por que você não apenas desenhar UIImages originais em um buffer de fundo em cima uns dos outros e, em seguida, escrever uma imagem combinada em um arquivo? Abaixo está um exemplo de como você pode desenhar duas imagens ao mesmo tampão:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top