2008-10-21 38 views
14

Có cách nào dễ dàng chuyển đổi giữa các kiểu màu trong Java (RGB, HSV và Lab).Tạo các bảng màu phổ

Giả sử mô hình màu RGB:

  • Làm thế nào để tính toán đen cơ thể bảng màu quang phổ? Tôi muốn sử dụng nó cho một biểu đồ nhiệt.
  • Làm thế nào về quang phổ bước sóng đơn?

Edit: tôi thấy rằng lớp ColorSpace có thể được sử dụng để chuyển đổi giữa RGB/CIE và nhiều mô hình màu khác.

+0

Cảm ơn, tất cả các câu trả lời là tốt. Tôi đã chọn một phản ánh cách tiếp cận mà tôi thực sự sử dụng (gradient đen-đỏ-vàng-trắng) – ddimitrov

+0

một số giá trị của QA có liên quan về giá trị của tôi: [giá trị RGB của phổ khả kiến] (http://stackoverflow.com/a/22681410/2521214) và [Sao BV màu chỉ mục màu RGB rõ ràng] (http://stackoverflow.com/a/22630970/2521214) – Spektre

Trả lời

2

Bạn có thể tạo bảng màu như vậy bằng cách sử dụng mô hình màu HSV. Thật dễ dàng khi bạn có mã HSV đến RGB và chơi xung quanh với các con số trong vài phút.

Tuy nhiên, tôi nghĩ không nên thêm mã vào dự án của bạn chỉ để tạo một bảng màu nhỏ.

Sẽ dễ dàng hơn và ít công việc hơn để trích xuất các bảng màu bạn cần từ một tệp và thêm chúng dưới dạng một mảng tĩnh.

Photoshop cho phép bạn chỉnh sửa bảng màu và đi kèm với bảng màu đen rất đẹp mắt như một giá trị đặt trước.

Bạn chỉ cần lưu chúng dưới dạng tệp .act. Bản thân tập tin chỉ là một tập tin 256 màu á 3 byte đơn giản (thứ tự được đọc, xanh lục, xanh dương. 8 bit cho mỗi kênh).

4

Có lẽ tôi không hiểu câu hỏi của bạn, nhưng bạn không thể thực sự tạo ra một quang phổ cơ thể đen thực sự từ một thiết bị đầu ra RGB. Gam màu hạn chế sẽ là một vấn đề, nếu không có gì khác. Nếu tất cả những gì bạn muốn là một cái gì đó trực quan tương tự như một phổ đen cơ thể, đó có thể là dễ dàng hơn rất nhiều.

Là gần đúng, đoạn đường nối từ (R, G, B) (0,0,0) đến (255,0,0), sau đó đến (255,255,0), sau đó đến (255,255,255). Điều đó sẽ mang lại cho bạn sự chuyển đổi màu xám sang màu cam, sang màu vàng, sang màu trắng.

Nếu bạn muốn một cái gì đó khoa học hơn, bài viết trên Wikipedia black body radiation có một số âm mưu về màu sắc so với nhiệt độ. Một khi bạn tìm ra tọa độ CIE, bạn có thể dịch chúng sang RGB trong không gian màu yêu thích của bạn.

Edit: tìm thấy một số tài liệu tham khảo trực tuyến khác: What color is the Sun? What color is a blackbody?

+0

Xin lỗi, tôi có nghĩa là một phép chiếu của BBS trong không gian màu của màn hình (loại gradient đó là được sử dụng cho bản đồ nhiệt). Các liên kết rất thú vị. – ddimitrov

20

Java đã được xây dựng trong RGB để chuyển đổi HSB. Bất cứ khi nào tôi cần một pallet nhanh chóng của màu sắc trong Java Tôi chỉ làm điều này:

public Color[] generateColors(int n) 
{ 
    Color[] cols = new Color[n]; 
    for(int i = 0; i < n; i++) 
    { 
     cols[i] = Color.getHSBColor((float) i/(float) n, 0.85f, 1.0f); 
    } 
    return cols; 
} 

Nó được một hack nhanh chóng và dơ bẩn (tôi sẽ chỉnh 'ma thuật' số cho ứng dụng của bạn), nhưng đối với đơn giản của tôi sử dụng nó tạo ra một pallet dễ chịu sáng đẹp.

+1

Cảm ơn. Điều này giải quyết nhu cầu bảng cầu vồng của tôi. – ddimitrov

+4

2 năm sau, điều này cũng giúp tôi. Cảm ơn. –

-1

Đây là cách hay để tạo hình vuông màu HSL ở AS3.

/** 
* Generate a BitmapData HSL color square (n x n) of hue 
* At a low n dimension you get cool blocky color palettes (e.g. try n=10) 
*/ 
function generateColorSquare(n:uint, hue:uint):BitmapData 
      { 
       var bd:BitmapData = new BitmapData(n, n, false, 0xFFFFFF); 
       for (var i:uint=n*n; i > 0; i--) 
       { 
        bd.setPixel(i % n, Math.floor(i/n), HSBColor.convertHSBtoRGB(hue, i/(n*n), (1/n) * (i % n))); 
       } 
       return bd; 
      } 
0

Bạn có thể tạo ra quang phổ màu này https://i.stack.imgur.com/ktLmt.jpg

sử dụng đoạn mã sau:

public void render(Screen screen) { 
    int green = 255; 
    int red = 0; 

    for (int i = 0; i <= 255 * 2; i++) { 
     int rate = i/255; 

     screen.fillRect((x + (i * width)/6), y, width, height, new Color(red, green, 0)); 

     red += 1 - rate; 
     green -= rate; 
    } 
} 
Các vấn đề liên quan