2009-12-21 20 views

Odpowiedz

16

Per dokumentacji NSColor:

NSColor *myColor = [NSColor colorWithCalibratedRed:redValue green:greenValue blue:blueValue alpha:1.0f]; 
+3

Należy użyć 1.0f zamiast 1,0, a 1,0 jest podwójne, który nie jest rodzimy typ dla iPhone. – nash

+0

Masz rację - niebezpieczeństwa szybkiego wpisywania kodu! –

+4

Warto chyba wyraźnie zaznaczyć, że wartości kolorów wynoszą od 0,0 do 1,0. Ponadto wersja "skalibrowana" jest prawdopodobnie bardziej odpowiednim wariantem tej metody. Chcesz użyć NSCalibratedRGBColorSpace (co odpowiada [NSColorSpace genericRGBColorSpace]) we wszystkich wewnętrznych relacjach z kolorami. I używaj tylko wariantów przestrzeni kolorów "urządzenia" podczas wysyłania do znanego urządzenia. – Kelan

3
float red = 0.5f; 
float green = 0.2f; 
float blue = 0.4f; 
float alpha = 0.8f; 

NSColor *rgb = [NSColor colorWithDeviceRed:red green:green blue:blue alpha:alpha]; 
8

Również nie zapomnij zrobić następującą konwersję od rzeczywistych wartości RGB masz, powiedzmy, że z programu Photoshop ...

RGB z (226, 226, 226) można utworzyć jako NSColor, stosując wartości:

Red: 226/255 = 0.886... 
Green: 226/255 = 0.886... 
Blue: 226/255 = 0.886... 

[NSColor colorWithDeviceRed:0.886f green:0.886f blue:0.886f alpha:1.0f]; 

Dlaczego 255? 8-bitowe kanały kolorów w zakresie od 0 do 255 (włącznie). Po znormalizowaniu jest on skalowany do zakresu [0,1] (włącznie). Zobacz referencje konwersji od znormalizowanych wartości do wartości niezormowanych i na odwrót.

Odniesienia

+2

To może być oczywiste dla wszystkich innych, ale dlaczego +1? Czy to dlatego, że 256 jest ładniejszą liczbą do podziału, więcej czynników, a więc mniej zaokrągleń/punktów dziesiętnych? –

+0

Ta odpowiedź jest nieco błędna. Wartości 8-bitowego koloru RGB w zakresie od 0 do 255, czyli łącznie 256 wartości. Zatem prawidłowym sposobem odwzorowania na wartości RGB w zakresie od 0 do 1 jest podzielenie przez 255, tj .: 'czerwony = 226/255'. Dodanie niezgrabnie wyglądającego 1 i podzielenie przez 256 daje bardzo podobne, ale nieco niepoprawne wyniki, które możesz zweryfikować, biorąc pod uwagę, co by się stało, gdyby składnik koloru był równy 0: zero podzielone przez 255 to wciąż zero, ale '(0 + 1)/256'> 0. – davidf2281

-2

Extension Swift 2

extension NSObject { 
    func RGB(r:CGFloat, g:CGFloat, b:CGFloat, alpha:CGFloat? = 1) -> NSColor { 
     return NSColor(red: r/255, green: g/255, blue: b/255, alpha: alpha!) 
    } 
} 

Następnie zadzwoń

RGB(r: 16, g: 105, b: 125) 

lub

RGB(r: 16, g: 105, b: 125, alpha: 0.5) 
+0

Po co tworzyć rozszerzenie NSObject, a nie NSColor? – ColdGrub1384

+0

Wolę pisać tylko RGB (... – emreoktem

+0

, ale jeśli utworzysz rozszerzenie NSObject, musisz wywołać funkcję podobną do tej: NSObject().RGB (_ :, g :, b :) lub dowolna podklasa NSObject – ColdGrub1384

Powiązane problemy