CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);
這會返回一個浮點數或浮點數組嗎?它看起來像星號是創建數組的簡寫。那是對的嗎?CGColorGetComponents()返回什麼?
當我在HSB UIColor對象的CGColor屬性上調用此函數時,它是否將值轉換爲RGB?
CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);
這會返回一個浮點數或浮點數組嗎?它看起來像星號是創建數組的簡寫。那是對的嗎?CGColorGetComponents()返回什麼?
當我在HSB UIColor對象的CGColor屬性上調用此函數時,它是否將值轉換爲RGB?
是的,它返回一個數組CGFloats
。具體來說,它返回「與指定顏色關聯的顏色分量(包括alpha)的強度值數組。」
返回的顏色成分取決於通過的CGColorRef
使用的顏色空間。
更多信息可在CGColor documentation找到。
從Apple:
它返回有石英顏色相關聯的顏色分量(包括α)的值。與指定顏色相關聯的顏色分量(包括alpha)的強度值數組。數組的大小比顏色的顏色空間的組件數量多一個。
CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor);
這是否返回一個浮子,或float數組?它看起來像星號是創建數組的簡寫。那是對的嗎?
排序的。
CGFloat *colors
聲明瞭一個變量,該變量持有一個指向至少一個CGFloat的指針。 CGColorGetComponents
返回一個指向幾個CGFloats的指針,一個接一個地指向一個C數組。你拿起那個指針並把它分配給(把指針放入)colors
變量。
聲明變量不是創建數組。其實CGColorGetComponents
也沒有。無論創建CGColor對象創建數組並將其存儲在對象內部, CGColorGetComponents
可以讓你有指向該存儲的指針。
聲明CGFloat *colors
變量只創建一個地方 - 變量 - 存儲指向一個或多個CGFloats的指針。變量中的東西是指針,指針處的東西就是數組。
如果這仍不清楚,請參閱Everything you need to know about pointers in C。
爲了得到RGB分量我用:
// Get UIColor's RGB normalized components (0..1)
CGFloat red, green, blue, alpha;
[color getRed:&red green:&green blue:&blue alpha:&alpha];
// Convert RGB components to 8-bit values (0..255)
int r = (int)(red * 255.0);
int g = (int)(green * 255.0);
int b = (int)(blue * 255.0);
這裏有一個如何可以將CGColorRef myColorRef
正確地轉換爲NSColor myNSColor
一個例子:
NSColorSpace *cp = [[NSColorSpace alloc] initWithCGColorSpace:CGColorGetColorSpace(myColorRef)];
const CGFloat *components = CGColorGetComponents(myColorRef);
size_t componentCount = CGColorGetNumberOfComponents(myColorRef);
NSColor* myNSColor = [NSColor colorWithColorSpace:cp components:components count:componentCount];
@htw感謝。這是否意味着它始終是RGBA?我在api的任何地方都沒有看到HSBA色彩空間。 – 2009-04-27 04:17:24
並非總是如此 - 例如,CGColor可能是在CMYK或白色空間中創建的。但是,根據Apple的顏色編程文檔(http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/DrawColor/index。HTML),HSBA色彩空間被指定爲RGBA色彩空間。所以,是的,在這種情況下,它會返回RGBA組件,因爲顏色是使用HSBA組件創建的。 – hbw 2009-04-27 04:44:41