2009-10-05 31 views
7

Trong Quartz 2D, các CGColorSpaceCreateLab() hàm lấy một tham số range quy định như sau:Quartz 2D: CGColorSpaceCreateLab: Mục đích của tham số phạm vi?

CGFloat khoảng [4]: ​​ Một mảng của 4 con số mà xác định phạm vi của các giá trị hợp lệ cho một * và b * các thành phần của không gian màu. Thành phần a * đại diện cho các giá trị chạy từ màu xanh lục sang màu đỏ và thành phần b * biểu diễn các giá trị chạy từ màu xanh sang màu vàng.

Câu hỏi là, thông số này thực sự là gì do?

Tôi có thể nghĩ đến ít nhất ba trường hợp có thể xảy ra.

Lựa chọn 1: Có lẽ nó quy mô các thành phần giá trị

Nói rằng tôi có hai không gian màu sắc với phạm vi khác nhau:

CGFloat range1[] = { -10, 10, -10, 10 }; 
CGFloat range2[] = { -100, 100, -100, 100 }; 
CGColorSpaceRef space1 = CGColorSpaceCreateLab(whitePoint, blackPoint, range1); 
CGColorSpaceRef space2 = CGColorSpaceCreateLab(whitePoint, blackPoint, range2); 

tôi tạo ra màu sắc với các giá trị thành phần tương tự và trong phạm vi nhất định mỗi không gian:

CGFloat components[] = { 50, 10, 10, 1 }; 
CGColorRef color1 = CGColorCreate(space1, components); 
CGColorRef color2 = CGColorCreate(space2, components); 

Do color1color2 đại diện t anh ấy cùng màu? Hoặc tham số range có thể mở rộng các thành phần theo một cách nào đó, làm cho hai màu này khác nhau không? (Nếu sau này, những gì giá trị cho range tương ứng với tiêu chuẩn CIELAB phối rộng Lựa chọn 2

: Có lẽ nó clip thành phần giá trị

Với hai không gian được định nghĩa ở trên, nói rằng tôi tạo ra các màu sắc sau để thay thế :

CGFloat components[] = { 50, 50, 50, 1 }; 
CGColorRef color1 = CGColorCreate(space1, components); 
CGColorRef color2 = CGColorCreate(space2, components); 

Bây giờ làm color1color2 đại diện cùng màu Hoặc không tham số range cắt các thành phần của color1 để {50? , 10, 10, 1}? (Nếu sau này, điểm là gì? Một xấp xỉ gần đúng của định nghĩa gam màu? Đảm bảo giá trị nằm trong phạm vi tương thích với một kiểu dữ liệu khác?)

Tùy chọn 3: Có thể nó được sử dụng ở nơi khác, như khi thực hiện ánh xạ gam màu với ý định hiển thị nhận thức

Có ý tưởng về phạm vi giá trị L * a * b * để mong đợi có thể hỗ trợ ánh xạ gam, đặc biệt trong trường hợp cảm nhận, nhưng một lần nữa, điều này có vẻ giống như một xấp xỉ thô không thấy lý do tại sao nó sẽ đặc biệt hữu ích.

Tùy chọn 4: Cái gì khác?

Trả lời

7

tôi đã làm một số thử nghiệm, và có vẻ như câu trả lời là:

Tham số range quy mô các giá trị a * và b * thành phần.

Ngoài ra, các giá trị thành phần làm không dường như bị cắt bớt theo phạm vi được chỉ định.

Vì vậy, trong ví dụ sau:

CGFloat range1[] = { -10, 10, -10, 10 }; 
CGFloat range2[] = { -100, 100, -100, 100 }; 
CGColorSpaceRef space1 = CGColorSpaceCreateLab(whitePoint, blackPoint, range1); 
CGColorSpaceRef space2 = CGColorSpaceCreateLab(whitePoint, blackPoint, range2); 

CGFloat components1[] = { 50, 10, 10, 1 }; 
CGColorRef color1 = CGColorCreate(space1, components1); 

CGFloat components2[] = { 50, 100, 100, 1 }; 
CGColorRef color2 = CGColorCreate(space2, components2); 

CGColorRef color3 = CGColorCreate(space1, components2); 
  • color1color2 đại diện cho cùng một màu sắc.
  • color3 dường như giữ lại các giá trị thành phần được chỉ định, mặc dù chúng nằm ngoài phạm vi được chỉ định bởi không gian màu.

Cuối cùng, có vẻ như một đặc tả phạm vi của {-127, 127, -127, 127} dẫn đến không gian màu với thang đo CIELAB chuẩn cho trục * và b *.

Nếu có ai có câu trả lời có thẩm quyền hơn, vui lòng đăng bài!

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