Có cách Cocoa Touch nào để chuyển đổi màu từ không gian màu này sang không gian màu khác không?Làm thế nào để chuyển đổi màu sắc từ một không gian màu khác?
Vào cuối của mã này:
UIColor *grey = [UIColor colorWithWhite: 0.5 alpha: 1.0];
CGColorRef greyRef = [grey CGColor];
int x = CGColorGetNumberOfComponents(greyRef);
... x
là 2.
Lý do tôi cần điều này là tôi đang cố gắng để sao chép màu sắc vào một danh sách các thành phần màu sắc cho CGGradientCreateWithColorComponents
, cần tất cả các màu trong một không gian màu duy nhất. Vấn đề là màu xám là trong không gian màu xám, chứ không phải là màu RGB. (Tên thoát cho tôi vào lúc này, nhưng nó không phải là quan trọng.)
CGGradientRef createGradient(NSInteger inCount, NSArray* inColors, CGFloat* inLocations) {
CGColorSpaceRef theColorspace = CGColorSpaceCreateDeviceRGB();
size_t numberOfComponents = 4;
NSInteger colorSize = numberOfComponents * sizeof(CGFloat);
CGFloat *theComponents = malloc(inCount * colorSize);
CGFloat *temp = theComponents;
for (NSInteger i = 0; i < inCount; i++) {
UIColor *theColor = [inColors objectAtIndex: i];
CGColorRef cgColor = [theColor CGColor];
const CGFloat *components = CGColorGetComponents(cgColor);
memmove(temp, components, colorSize);
temp += numberOfComponents;
}
CGGradientRef gradient = CGGradientCreateWithColorComponents(theColorspace,
theComponents, inLocations, inCount);
CGColorSpaceRelease(theColorspace);
free(theComponents);
return gradient;
}
Tôi biết tôi có thể tìm kiếm màu sắc trong không gian màu xám và chuyển đổi chúng. Nhưng điều đó chỉ giải quyết một trường hợp. Từ tìm kiếm at this question, tôi nghĩ rằng HSB cũng được xử lý. Nhưng tôi muốn viết một số mã ở đây và không bao giờ nghĩ về nó một lần nữa, có nghĩa là hỗ trợ không chỉ là không gian màu sắc mà có bây giờ nhưng bất cứ điều gì Apple có thể hình dung thêm trong tương lai. Tôi có may mắn không?
Đây là một câu trả lời khá hay, mặc dù bạn có thể muốn đề cập đến màu sắc HSB được đưa vào không gian màu RGB. Vì vậy, nó hoàn toàn hợp lệ để gọi 'getRed: green: blue: alpha:' trên chúng. –
Hmm, có vẻ như không phải là 'kCGColorSpaceModelHSB':/ – damian
Không. Chúng được ánh xạ tới không gian RGB; sử dụng phương thức RGB cho chúng. Từ các tài liệu cho 'colorWithHue: saturation: brightness: alpha:' ** Thông tin màu được đại diện bởi đối tượng [trả về] nằm trong vùng màu RGB của thiết bị. ** –