2009-05-07 12 views
18

Làm cách nào để chuyển đổi giá trị thang độ xám (0-255) thành giá trị/biểu diễn RGB? Đó là để sử dụng trong một hình ảnh SVG, mà dường như không đi kèm với một hỗ trợ màu xám, chỉ RGB ...Chuyển đổi giá trị thang độ xám sang biểu diễn RGB?

Lưu ý: đây không phải là RGB -> thang độ xám, đã được trả lời trong một câu hỏi khác, ví dụ: Converting RGB to grayscale/intensity)

Trả lời

21

Cách tiếp cận nhanh chóng và bẩn là lặp lại cường độ thang độ xám cho từng thành phần RGB. Vì vậy, nếu bạn có thang độ xám 120, nó sẽ chuyển thành RGB (120, 120, 120).

Điều này nhanh chóng và bẩn vì độ sáng hiệu dụng bạn nhận được phụ thuộc vào độ sáng thực tế của các phụ con R, G và B của thiết bị bạn đang sử dụng.

7

Quy mô xám có nghĩa là tất cả các giá trị có cùng cường độ. Đặt tất cả các kênh (trong RGB) bằng với giá trị màu xám và bạn sẽ có một hình ảnh màu đen và trắng RGB.

+2

Ồ, không. Trên thực tế, bạn sẽ KHÔNG có hình ảnh đen trắng. Bạn sẽ có một hình ảnh bao gồm các sắc thái khác nhau của màu xám. Ở mức thấp hơn, các pixel thực tế sẽ bao gồm các chấm đỏ, xanh lá cây và xanh dương, ở các mức cường độ sao cho người xem từ xa sẽ thấy hình ảnh trung tính. Theo dõi vòng lặp mắt và xem các pixel màu xám trên màn hình của bạn. Bạn sẽ thấy một hỗn hợp của các chấm đỏ, xanh lá cây và xanh dương. –

+0

Bạn đúng là hình ảnh được hiển thị trên màn hình sẽ bao gồm tất cả RGB nhìn vào quá trình làm sáng tỏ. Vì vậy, tất cả các màu sắc sẽ được thể hiện trên màn hình. Tôi có một thời gian khó hiểu làm thế nào "Bạn sẽ có một hình ảnh bao gồm các sắc thái khác nhau của màu xám" khác với một hình ảnh quy mô màu xám. – Erik

+1

Erik, không, nhưng "hình ảnh tỷ lệ xám" khác khá nhiều từ "hình ảnh đen trắng" (chỉ có hai màu). – Aistina

4

Woudln't đặt R, G và B thành cùng một giá trị (giá trị thang độ xám) cho mỗi pixel giúp bạn có được màu xám chính xác?

+2

Không chính xác. Nó phụ thuộc vào cách bạn sẽ xem màu sắc. Màn hình hoặc máy in của bạn được hiệu chỉnh như thế nào? Bạn sẽ thấy màu gì trong môi trường xem? NẾU màu sẽ được in, máy in của bạn được hiệu chuẩn như thế nào, được đặc trưng? Cài đặt nào đã được sử dụng cho máy in và bất kỳ cấu hình ICC nào? Điểm trắng? Ánh sáng nào được sử dụng để xem bản in? Ánh sáng mặt trời? Bóng đèn giả lập D50? Đèn vonfram? Với mức xấp xỉ hợp lý, R = G = B = giá trị màu xám là một khởi đầu tốt mặc dù. Nó sẽ giúp bạn gần gũi. –

7

Chuyển đổi thang độ xám thành RGB rất đơn giản. Đơn giản chỉ cần sử dụng R = G = B = giá trị màu xám. Ý tưởng cơ bản là màu (như được xem trên màn hình dưới dạng RGB) là một hệ thống phụ gia.

http://en.wikipedia.org/wiki/Additive_color

Do đó, thêm màu đỏ sang màu xanh lá cây mang lại màu vàng. Thêm vào một số màu xanh để trộn với số lượng bằng nhau, và bạn nhận được một màu trung tính. Đầy trên [đỏ, xanh lục, xanh lam] = [255 255 255] cho ra màu trắng. [0,0,0] sản lượng màn hình màu đen. Giá trị trung gian, khi R = G = B đều bằng nhau sẽ cho ra màu trung tính danh nghĩa của mức xám nhất định.

Một vấn đề nhỏ phụ thuộc vào cách bạn xem màu, nó có thể không hoàn toàn trung lập. Điều này sẽ phụ thuộc vào cách màn hình của bạn (hoặc máy in) được hiệu chuẩn. Có những chiều sâu thú vị về khoa học màu sắc mà chúng ta có thể đi vào từ thời điểm này. Tôi sẽ dừng ở đây.

25

Nếu bạn có giá trị xám trong một biến và muốn tạo ra một giá trị mới theo hình thức 0x00RRGGBB, sau đó một cách nhanh chóng để làm điều này là:

int rgb = grey * 0x00010101; 

hoặc tương đương trong ngôn ngữ bạn đã chọn.

+4

+1 cho phép nhân đơn giản. Bản năng là để đi sâu vào những thay đổi bit và bit ORs, nhưng điều này là đơn giản hơn rất nhiều và chỉ hoạt động. –

+1

Hoặc 'rgb = xám << 16 | màu xám << 8 | grey', trong đó '<<' là toán tử dịch trái đã ký, và '|' bao gồm bit OR. – sp00m