Как скомпоновать два объекта UIImage в один UIImage за пределами -drawRect:?

У меня есть несколько объектов UIImage, которые я хочу скомпоновать в один UIImage, а затем сохранить его на диск. Я не показываю это на экране, поэтому нет смысла делать это в -drawRect.

Есть ли способ создать контекст, похожий на -drawRect:, а затем просто нарисовать там объекты UIImage, используя что-то вроде CGContextDrawImage(context, imgRect, img.CGImage);?


person Proud Member    schedule 29.05.2011    source источник


Ответы (2)


Я полагаю, вы хотите использовать CGContextRef чтобы нарисовать все изображения в нужном месте, а затем получить результирующее изображение. Код будет выглядеть примерно так:

CGContextRef context = CGBitmapContextCreate(nil, desired_width, desired_height, bitsPerComponent, bytesPerRow, CGColorSpaceCreateDeviceRGB(), CGImageGetBitmapInfo(image));
//This code is to ilustrate what you have to do:
for(image in your Images) {

    CGContextDrawImage(context, CGRectMake(currentImage.frame.origin.x, currentImage.frame.origin.y, CGImageGetWidth(currentImage), CGImageGetHeight(currentImage), currentImage);
}

CGImageRef mergeResult  = CGBitmapContextCreateImage(context);

mergedImage = [[UIImage alloc] initWithCGImage:mergeResult];
CGContextRelease(context);
CGImageRelease(mergeResult);
person tjarratt    schedule 29.05.2011
comment
Здорово! Я попробую это!! Большое спасибо =) - person Proud Member; 30.05.2011

CGContextRefs можно создавать в любое время, и это позволяет выполнять все виды манипуляций с изображениями.

Используйте CGBitmapContextCreate для создания контекста и CGBitmapContextCreateImage для получения окончательного результата.

person TheBlack    schedule 29.05.2011