2009-12-21 41 views

Trả lời

16

mỗi tài liệu NSColor:

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

Bạn nên sử dụng 1.0f thay vì 1.0, như 1.0 là một đôi, mà không phải là một loại bản địa dành cho iPhone. – nash

+0

Bạn đúng - những nguy hiểm của việc nhập mã nhanh chóng! –

+4

Điều này có thể làm cho nó rõ ràng rằng các giá trị màu sắc là từ 0,0 đến 1,0. Ngoài ra, phiên bản "được hiệu chỉnh" thực sự nhiều khả năng là biến thể chính xác của phương pháp này để sử dụng. Bạn muốn sử dụng NSCalibratedRGBColorSpace (tương ứng với [NSColorSpace genericRGBColorSpace]) trong tất cả các giao dịch nội bộ có màu. Và chỉ sử dụng các biến thể không gian màu "thiết bị" khi xuất ra một thiết bị cụ thể đã biết. – 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

Cũng đừng quên để làm việc chuyển đổi sau đây từ các giá trị RGB thực tế bạn nhận được, cho phép nói từ Photoshop ...

một RGB (226, 226, 226) có thể được khởi tạo dưới dạng màu NSC sử dụng các giá trị:

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]; 

Tại sao 255? Các kênh màu 8 bit nằm trong khoảng từ 0 đến 255 (bao gồm). Khi chuẩn hóa, giá trị này được chia tỷ lệ thành phạm vi [0,1] (bao gồm). Xem tham chiếu cho các chuyển đổi từ các giá trị được chuẩn hóa sang các giá trị không chuẩn hóa và ngược lại.

Tài liệu tham khảo

+2

Điều này có thể hiển nhiên đối với mọi người khác, nhưng tại sao lại là +1? Có phải chỉ vì 256 là một số đẹp hơn để chia với, nhiều yếu tố hơn, do đó ít làm tròn lỗi/dấu thập phân? –

+0

Câu trả lời này hơi sai. Giá trị thành phần màu RGB 8 bit nằm trong khoảng từ 0 đến 255, tổng cộng là 256 giá trị. Do đó, cách chính xác để ánh xạ tới các giá trị RGB nằm trong khoảng từ 0 đến 1 là chia cho 255, tức là: 'red = 226/255'. Việc thêm cái nhìn lúng túng 1 và chia cho 256 cho kết quả rất giống nhưng hơi sai, bạn có thể xác minh bằng cách xem xét điều gì sẽ xảy ra nếu một thành phần màu là 0: 0 chia cho 255 vẫn bằng 0, nhưng '(0 + 1)/256'> 0. – davidf2281

-2

Extension for 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!) 
    } 
} 

Sau đó, chỉ cần gọi

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

hoặc

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

Tại sao tạo phần mở rộng của NSObject chứ không phải của NSColor? – ColdGrub1384

+0

Tôi thích viết RGB (... – emreoktem

+0

nhưng nếu bạn tạo phần mở rộng của NSObject, bạn cần gọi hàm này như sau: NSObject().RGB (_ :, g :, b :) hoặc bất kỳ phân lớp NSObject nào – ColdGrub1384

Các vấn đề liên quan