Как использовать 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.

Другие вопросы по тегам