2009-12-12 31 views
13

Tôi đang cố gắng kết hợp hai vectơ RGB nguồn để tạo ra một "vector kết quả" thứ ba là một kết hợp trực quan của hai số đầu tiên. Lý tưởng nhất, tôi sẽ có thể mô phỏng "đặc điểm trộn sơn thực", nhưng để đơn giản, tôi đang cố gắng tìm một phương pháp mà kết quả trông trực quan giống như những gì bạn sẽ nhận được từ việc kết hợp hai nguồn rgb 's.Trộn hai vectơ màu RGB để có được kết quả

tối thiểu, những đặc điểm này:
RED + BLACK = TỐI RED
ĐỎ + TRẮNG = đèn đỏ

một cách tối ưu, cũng với các đặc tính sơn thật:
ĐỎ + XANH = PURPLE
ĐỎ + VÀNG = CAM
(vv)

-

Tôi hiện đang làm điều này "cách lười" bằng cách thêm hai nguồn RGB vector/255, sau đó chuẩn hóa (và nhân với 255). Vì vậy, sử dụng điều này: [Đỏ = < 1,0,0> * 255] + [Xanh = < 0,0,1> * 255] cho Magenta = < 1,0,1>/sqrt (2) * 255 , mặc dù các màu khác ít trực quan hơn hoặc thậm chí có thể nhìn thấy được ... Tôi cần một phương pháp tốt hơn! Vui lòng trợ giúp :-)

+0

Dường như khá giống với http://stackoverflow.com/questions/398224/how-to-mix-colors-naturally-with-c –

+2

Bạn có thể không muốn các đặc điểm "sơn thực", bởi vì sơn thật không Làm việc tốt như bạn nghĩ. Tôi sẽ đặt cược bạn nghĩ rằng màu vàng + xanh = xanh lá cây, nhưng điều đó không đúng trong bất kỳ không gian màu nào mà tôi biết. –

+0

Tôi hơi muộn một chút, nhưng đây là một triển khai có thể hoạt động. http://stackoverflow.com/a/14840112/475329 –

Trả lời

14

Có phải những gì bạn đề xuất giống với mức trung bình có trọng số không?

Average R = w1*R1 + w2*R2 + w3*R3 + ... + wn*Rn 

Average G = w1*G1 + w2*G2 + w3*G3 + ... + wn*Gn 

Average B = w1*B1 + w2*B2 + w3*B3 + ... + wn*Bn 

của w là các phần trọng và tổng của chúng là 1.

R1 là thành phần màu đỏ của màu đầu tiên để trộn, ví dụ.

Vì vậy, nếu bạn muốn kết hợp hai màu sắc đồng đều, nó sẽ là:

Average R = 0.5*R1 + 0.5*R2 

Average G = 0.5*G1 + 0.5*G2 

Average B = 0.5*B1 + 0.5*B2 

Đối với việc lập bản đồ màu kết quả với một màu tên ("đỏ sẫm") có lẽ chỉ cần làm một bảng tra cứu và chọn gần nhất?

+1

Làm thế nào để bạn xác định w hoặc W ma trận để có thể trộn rgb (hoặc cmyk) như sơn? – yos

+2

Nếu bạn đang trộn 2 màu, chữ W bằng 1/2 hoặc 0,5, chính xác như câu trả lời gợi ý. –

0

Tôi nghĩ bạn nên thực sự xác định "+" trong bảng màu của bạn là gì.

Dựa trên yêu cầu của bạn, tôi đã dịch chúng thành các mã màu hex ước tính, (có thể dễ dàng phân bổ lại một cách nhanh chóng).

 
RED  + BLACK = DARK RED 
#ff0000 + #000000 = #800000 
RED  + WHITE = LIGHT RED 
#ff0000 + #ffffff = #ff8080 

optimally, also with real paint characteristics: 
RED  + BLUE = PURPLE 
#ff0000 + #0000ff = #800080 
RED  + YELLOW = ORANGE 
#ff0000 + #ffff00 = #ff8000 

Tôi không thấy mẫu xác định mà bạn có thể tính toán một số công thức để đạt được điều đó.

Phương pháp của John và Nils có thể sẽ đến gần với màu sắc nhưng có lẽ không đến các giá trị chính xác. Tôi đề nghị bạn hãy thử.

EDIT:
Cập nhật mã màu sai. Giờ nó đã có ý nghĩa hơn nhiều rồi.

+1

Mã màu của bạn cho màu vàng và màu da cam dường như tắt. –

+0

Có, nếu bạn cố định màu vàng = # ffff00 và cam = # ff8000 và màu đỏ nhạt = # ff8080, mẫu sẽ trở nên rõ ràng. –

+0

Rất tiếc, tôi đã sao chép và dán nhầm. Hãy để tôi cập nhật bài đăng của mình. –

8

Vấn đề là bạn đang cố gắng liên hệ hai lý thuyết màu sắc khác nhau. RGB là lý thuyết màu phụ gia (ánh sáng màu được phát ra từ nguồn). Trong trường hợp này, càng có nhiều quang phổ bạn thêm vào hỗn hợp, bạn càng gần trắng hơn.

Đối với "pha trộn sơn", bạn cần mô phỏng lý thuyết màu trừ đi điều chỉnh cách phản ánh màu sắc được trộn lẫn. (tức là ánh sáng phản xạ như sơn, các bề mặt khác nhau, vv) Dưới đây là overview.

JavaScript trên this page là một đầu mối về cách bạn có thể tiến hành chuyển đổi RGB thành CMYK.

+0

Câu hỏi hỏi về trộn sơn, nhưng tất cả các ví dụ dường như liên quan nhiều hơn đến trộn RGB. Tôi thấy CMYK trộn rất trực quan. –

+0

tôi giải thích câu hỏi được hỏi về trộn RGB (phụ gia) nhưng nhận được kết quả CMYK (trừ). –

2

Trộn các màu RGB để mô phỏng hỗn hợp màu trừ (ví dụ: hỗn hợp dạng sơn) có thể được thực hiện bằng cách chuyển đổi giá trị RGB thành đường cong phản xạ quang phổ, sau đó thực hiện hỗn hợp ở đó. Câu hỏi này rất giống với câu hỏi khác, stackoverflow.com/questions/10254022/, nơi giải pháp được thảo luận chi tiết hơn.

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