Как использовать CGLayer для рисования нескольких изображений вне экрана
В конечном итоге я работаю над функцией размытия рамки для использования на iPhone.
Эта функция берет UIImage и рисует прозрачные копии, сначала в стороны, затем берет это изображение и рисует прозрачные копии сверху и снизу, возвращая хорошо размытое изображение.
Читая Руководство по программированию " Чертеж с кварцем 2D", он рекомендует использовать CGLayers для такого рода операций.
Пример кода в руководстве немного сложен для понимания, поэтому я хотел бы, чтобы кто-то показал мне очень простой пример взятия UIImage и преобразования его в CGLayer, который я затем рисовал бы копии и возвращал как UIImage.
Было бы хорошо, если бы значения были жестко запрограммированы (для простоты). Это только для меня, чтобы обернуть голову, а не для производственного кода.
1 ответ
UIImage *myImage = …;
CGLayerRef layer = CGLayerCreateWithContext(destinationContext, myImage.size, /*auxiliaryInfo*/ NULL);
if (layer) {
CGContextRef layerContext = CGLayerGetContext(layer);
CGContextDrawImage(layerContext, (CGRect){ CGPointZero, myImage.size }, myImage.CGImage);
//Use CGContextDrawLayerAtPoint or CGContextDrawLayerInRect as many times as necessary. Whichever function you choose, be sure to pass destinationContext to it—you can't draw the layer into itself!
CFRelease(layer);
}
Технически это мой первый код iPhone (я программирую только на Mac), так что будьте осторожны. Я использовал CGLayer и раньше, и, насколько я знаю, Quartz ничем не отличается от iPhone.
... и вернуться как UIImage.
Я не уверен, как сделать эту часть, никогда не работал с UIKit.