Как «сгладить» несколько UIImageViews в один? - PullRequest
7 голосов
/ 10 августа 2009

У меня такое ощущение, что это не простая задача, но мне нужно объединить или сгладить UIImageView с другим представлением UIImage, лежащим над ним. Например: у меня есть два UIImageViews. Один из них имеет UIImage травянистого поля (1200 x 1200 пикселей). Другой - UIImage баскетбольного мяча (128 x 128 пикселей), и он расположен над изображением травянистого поля таким образом, что баскетбольный мяч оказывается на травянистом поле. Я хочу, чтобы СОХРАНИТЬ наложенные UIImageViews как один файл изображения в мой фотоальбом, а это значит, что мне нужно будет как-то объединить два изображения. Как это будет достигнуто? (ПРИМЕЧАНИЕ. Снимок экрана (320 x 480 пикселей) не будет приемлемым решением, поскольку я хочу сохранить размер 1200 x 1600 пикселей.

ВОПРОС:
Как можно объединить несколько UIImageViews в один и сохранить полученное изображение при сохранении размера / разрешения.

Ответы [ 2 ]

5 голосов
/ 10 августа 2009

Почему бы вам просто не нарисовать оригинальные UIImages в фоновом буфере друг над другом, а затем записать объединенное изображение в файл? Ниже приведен пример того, как вы можете нарисовать два изображения в одном буфере:

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);
3 голосов
/ 10 августа 2009

Это берет любое представление и делает UIImage из этого. Любое представление и его подпредставления будут «сведены» в UIImage, который вы можете отобразить или сохранить на диск.

  - (UIImage*)imageFromView{

    UIImage *image;

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

    return image;

}
...