내가 몇 주 전에이 작업을 수행하기 위해 필요한이 나는 색상을 변환하는 방법입니다. 나는 기본적으로 문제가 해결이 답변, 여기 How to tile the contents of a CALayer?
가 더 편리한 형태를 발견
// callback for CreateImagePattern.
static void DrawPatternImage (void *info, CGContextRef ctx) {
CGImageRef image = (CGImageRef) info;
CGContextDrawImage(ctx,
CGRectMake(0,0, CGImageGetWidth(image),CGImageGetHeight(image)),
image);
}
// callback for CreateImagePattern.
static void ReleasePatternImage(void *info) {
CGImageRelease((CGImageRef)info);
}
CGColorRef CreateCGColorWithPatternFromNSImage(NSImage *image) {
/* User needs to release the color */
NSData *imageData = [image TIFFRepresentation];
CFDataRef cfImageData = CFBridgingRetain(imageData);
CGImageSourceRef source = CGImageSourceCreateWithData(cfImageData, NULL);
CGImageRef cgImage = CGImageSourceCreateImageAtIndex(source, 0, NULL);
CFRelease(cfImageData);
CFRelease(source);
//assume image is the CGImage you want to assign as the layer background
CGFloat width = [image size].width;
CGFloat height = [image size].height;
static const CGPatternCallbacks callbacks = {0, &DrawPatternImage, &ReleasePatternImage};
CGPatternRef pattern = CGPatternCreate (cgImage,
CGRectMake (0, 0, width, height),
CGAffineTransformMake (1, 0, 0, 1, 0, 0),
width,
height,
kCGPatternTilingConstantSpacing,
true,
&callbacks);
CGColorSpaceRef space = CGColorSpaceCreatePattern(NULL);
CGFloat components[1] = {1.0};
CGColorRef color = CGColorCreateWithPattern(space, pattern, components);
CGColorSpaceRelease(space);
CGPatternRelease(pattern);
return color;
}
왜 NSColor를 CIColor로 변환합니까? 'NSColor'는'CGColor' 메서드를 가지고 있습니다. –
결과가 잘못되었음을 어떻게 알 수 있습니까? –
@MartinR 그 방법은 Mountain Lion에서만 가능합니다. – aneuryzm