2009-08-10 2 views
7

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

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

ответ

3

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

- (UIImage*)imageFromView{ 

    UIImage *image; 

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

    return image; 

} 
+0

Кстати, Corey, есть ли способ сделать это (ваш код выше), сохраняя при этом разрешение изображения представления, которое является базовым уровнем (self.view.layer в коде)? У меня размер фото 1200 x 1600, но после обработки (используя ваш код) результирующее изображение имеет размер пикселя UIImageView, который был его контейнером (320 x 427). – RexOnRoids

+0

Не могу сказать точно, но тактика, используемая текилатанго, похоже, для этого. Метод, который я использую, будет захватывать только то, что отображается на экране при разрешении экрана. Это быстро и грязно, но работает. Если вам нужны лучшие результаты, вам нужно будет нарисовать изображение в буфер, как он проиллюстрировал. Конечно, поскольку это iPhone, если есть способ уменьшить размер ваших изображений, не влияя на UX, тогда вы можете рассмотреть его по соображениям памяти/производительности. –

+0

Чтобы сохранить разрешение изображения, просто используйте 'UIGraphicsBeginImageContextWithOptions (self.view.bounds.size, NO, 0.0)' –

5

Почему бы вам просто не нарисовать оригинальный 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); 
+0

Благодарим за это предложение. Сохраняет ли это разрешение/пиксели исходных изображений или они имеют тот же размер, что и те, которые их удерживают? – RexOnRoids

+0

Сохраняет разрешение, потому что вы рисуете исходное изображение. –

Смежные вопросы