Я хочу замаскировать изображение другим изображением, используя CGLayerRef во внеэкранном рендеринге, поскольку он подходит для высококачественного рендеринга, как указано в документации.
Рисование слоя базовой графики: объекты CGLayer позволяют вашему приложению использовать слои для рисования. Слои подходят для следующих целей: • Качественная закадровая визуализация рисунка, который вы планируете использовать повторно.
Но я не смог найти ни одного примера в objective-c, чтобы понять, как это работает. В моем контексте я хочу замаскировать изображение с помощью изображения формы (сплошная цветная форма), которую я использовал для этого таким образом
//The context I use to mask my image with the mask image.
CGColorSpaceRef colorSpace= CGColorSpaceCreateDeviceRGB();
CGContextRef mainViewContentContext = CGBitmapContextCreate (NULL, _bigImageRect.size.width, _bigImageRect.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colorSpace);
//Mask image
CGContextClipToMask(mainViewContentContext,
CGRectMake(0,
-_bigImageRect.origin.y,
_bigImageRect.size.width,
_bigImageRect.size.height),
_maskImage.CGImage);
//Drawing the image on the mask image.
CGContextDrawImage(mainViewContentContext,
CGRectMake(0,
0,
_bigImageRect.size.width,
_bigImageRect.size.height),
_ImageToBeMasked.CGImage);
CGImageRef mainViewContentBitmapContext = CGBitmapContextCreateImage(mainViewContentContext);
CGContextRelease(mainViewContentContext);
UIImage*maskedImage = [UIImage imageWithCGImage:mainViewContentBitmapContext];
CGImageRelease(mainViewContentBitmapContext)
return maskedImage;
Но как я могу замаскировать с помощью CGLayers, как показано ниже? Я ценю любую помощь.
CGLayerRef layer = CGLayerCreateWithContext(mainViewContentContext, _bigImageRect.size, NULL);
CGContextDrawLayerInRect(mainViewContentContext, _bigImageRect, layer);
CGLayerRelease(layer);
//And then.. how can I do the masking using this CGLayerRef???
mask
к любому слою, включая тот, который находится вне экрана. А что касается низкого качества, все зависит отcontentsScale
слоя, не так ли? Если вы создаете CALayer, и он не является частью интерфейса, и вы забываете установить егоcontentsScale
, тогда вы должны винить только себя. - person matt   schedule 11.02.2018