2009-05-20 11 views
12

UIColor rgb bileşenlerini, CGBitmapContext pikselleri el ile oluşturmak için ayıklamak istiyorum. Aşağıdaki örnek kod, UIColor sabitlerinin çoğunda iyi çalışır, ancak hepsi değil, karışıktır. Şöyle ki: beklendiği gibi [UIColor yellowColor] içinBazı UIColors'un renk bileşenleri olan anormal sonuçlar

CGColorRef color = [[UIColor yellowColor] CGColor]; 
const float* rgba = CGColorGetComponents(color); 

float r = rgba[0]; 
float g = rgba[1]; 
float b = rgba[2]; 
float a = rgba[3]; 

NSLog(@"r=%f g=%f b=%f a=%f", r, g, b, a); 

sonuçlar yukarıda
r = 1,000000 g = 1,000000 b = 0.000000 bir = 1,000000, bulunmaktadır.

[UIColor redColor] r = 1,000000 g = 0.000000 B = 0.000000 bir = 1,000000, tekrar beklendiği gibi verir. Benzer şekilde blueColor ve greenColor için.

Ancak, [UIColor blackColor] ve [UIColor whiteColor] için sonuçlar tamamen anormal görünüyor ve ben (aslında ben ise) ben yanlış yapıyorum bilmiyorum. Şöyle ki

, [UIColor blackColor] verir r = 0.000000 g = 1,000000 b = 0.000000 bir = 0.000000, yeşil bir Şeffaf olan ,

ve [UIColor whiteColor] r = 1,000000 g = 1,000000 b = 0.000000 bir = 0.000000 verir , Şeffaf bir sarı olan .

(1) ne yapıyorum açıklamak yanlış
(2) benim anormal sonuçları kopya ve bana deme bana, ya
(3):

Ben eğer birileri olabilir ya çok memnun olurum Bana büyük bir çekiçle başımdan çarptı, bu yüzden çok fazla acı vermeyi bıraktı.

Howard

cevap

11

Renk alanının her zaman RGBA olduğunu varsayıyorsunuz, bu durum böyle değil.

bu kodu deneyin:

CGColorRef color = [[UIColor blackColor] CGColor]; 
const CGFloat* rgba = CGColorGetComponents(color); 
CGColorSpaceRef space = CGColorGetColorSpace(color); 
CGColorSpaceModel model = CGColorSpaceGetModel(space); 
NSLog(@"%d", model); 

Ve modeli kCGColorSpaceModelMonochrome verecektir.

+0

Parlak! Teşekkür ederim. Daha önce CGColorGetComponents (color) 'ı çağırmadan önce' CGColorGetNumberOfComponents (color) 'ile ilgili sık başvuruyla karıştırdım. Şimdi nedenini görüyorum. Bu arada, yukarıdaki modelin * adını * basmanın bir yolu yok, sadece değeri değil mi? – hkatz

+0

Hata ayıklayıcı size adını gösterecektir, yazdırabildiğinizden emin değilim, çünkü bir sayının const tanımıdır. – pgb

2

Ben kaçırdığını şey renkleri farklı renk mekanlarda tanımlanabilir olduğunu düşünüyorum: Eğer hepsi RGBA konum varsayıyoruz. Örneğin, the docs, blackColor "Bu, gri tonu değeri 0,0 olan ve alpha değeri 1.0 olan bir renk nesnesini döndürür." Yani bence sadece iki bileşen siyah değil, dört geçerli.