Я пытаюсь создать маску изображения с помощью цветового пространства kCGColorSpaceDisplayP3, чтобы поддерживать широкий диапазон цветов iPhone 7.Растровый контекст для широкого диапазона цветов
Я могу правильно создать маску изображения при использовании цветового пространства sRGB на iPhone 6 и более ранних устройствах с использованием iOS 10 и более ранних версий iOS. Но я понятия не имею, где я неправильно при создании цветового использования kCGColorSpaceDisplayP3:
CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceDisplayP3);
CGContextRef context = CGBitmapContextCreate(NULL, 320.0, 320.0, 32, 320.0*16, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapFloatComponents);
CGFloat radius = 10.0;
CGFloat components[] = {1.0,1.0,1.0,1.0, 1.0,1.0,1.0,1.0, 1.0,1.0,1.0,1.0, 1.0,1.0,1.0,1.0, 1.0,1.0,1.0,0.5, 1.0,1.0,1.0,0.0};
CGFloat locations[] = {0.0, 0.1, 0.2, 0.8, 0.9, 1.0};
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, 6); //colorSpaceP3
CGPoint center = CGPointMake(100.0, 100.0);
CGContextDrawRadialGradient(context, gradient, center, 0.1, center, radius, 0);
CGGradientRelease(gradient);
CGImageRef imageHole = CGBitmapContextCreateImage(context);
CGImageRef maskHole = CGImageMaskCreate(CGImageGetWidth(imageHole), CGImageGetHeight(imageHole), CGImageGetBitsPerComponent(imageHole), CGImageGetBitsPerPixel(imageHole), CGImageGetBytesPerRow(imageHole), CGImageGetDataProvider(imageHole), NULL, FALSE);
CGImageRelease(imageHole);
CGImageRef image = [UIImage imageNamed:@"prosbo_hires.jpg"].CGImage;
CGImageRef masked = CGImageCreateWithMask(image, maskHole);
CGImageRelease(maskHole);
UIImage *img = [UIImage imageWithCGImage:masked];
CGImageRelease(masked);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
Журнал говорит:
: CGImageMaskCreate: недопустимые биты маски/компонент: 32.
Я не имеют большой опыт работы с Core Graphics. Кто-нибудь может предложить что-то здесь.
Спасибо.
Я попытался создать как растровый контекст, так и маску, используя 8 бит в дополнение. Это отлично работает на всех устройствах под iPhone 7. В iPhone 7 и 7+ непрозрачность изображения в результате почти неграмотна. Это почти прозрачно. – maven25