2009-04-27 144 views
7
CGFloat* colors = CGColorGetComponents(hsbaColor.CGColor); 

這會返回一個浮點數或浮點數組嗎?它看起來像星號是創建數組的簡寫。那是對的嗎?CGColorGetComponents()返回什麼?

當我在HSB UIColor對象的CGColor屬性上調用此函數時,它是否將值轉換爲RGB?

回答

4

是的,它返回一個數組CGFloats。具體來說,它返回「與指定顏色關聯的顏色分量(包括alpha)的強度值數組。」

返回的顏色成分取決於通過的CGColorRef使用的顏色空間。

更多信息可在CGColor documentation找到。

+0

@htw感謝。這是否意味着它始終是RGBA?我在api的任何地方都沒有看到HSBA色彩空間。 – 2009-04-27 04:17:24

+0

並非總是如此 - 例如,CGColor可能是在CMYK或白色空間中創建的。但是,根據Apple的顏色編程文檔(http://developer.apple.com/DOCUMENTATION/Cocoa/Conceptual/DrawColor/index。HTML),HSBA色彩空間被指定爲RGBA色彩空間。所以,是的,在這種情況下,它會返回RGBA組件,因爲顏色是使用HSBA組件創建的。 – hbw 2009-04-27 04:44:41

1

Apple

它返回有石英顏色相關聯的顏色分量(包括α)的值。與指定顏色相關聯的顏色分量(包括alpha)的強度值數組。數組的大小比顏色的顏色空間的組件數量多一個。

5
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

0

爲了得到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);
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];