2011-11-04 47 views
6

Trong C#, làm cách nào tôi có thể tạo hình ảnh sau đây theo chương trình?Tạo biểu đồ màu theo lập trình?

http://deathmatchgame.files.wordpress.com/2010/07/color_picker.png

Tôi cũng-biết bao lâu này sẽ mất để xử lý. Đó là tốt. Hiệu suất không phải là ưu tiên hàng đầu tại thời điểm này.

Chỉnh sửa Lưu ý rằng tôi không quan tâm đến đúng khu vực của hình ảnh chỉ hiển thị gradient có thang màu xám.

+1

Graphics.DrawImage() là khá nhanh. Bạn không phải tạo ra hình ảnh này khi chạy, bạn chỉ cần biết ánh xạ ngược của vị trí với màu. –

Trả lời

3

Từ giao diện của nó, đó là một biểu đồ màu HSL. Đoạn mã dưới đây sẽ tạo ra một mảng màu 2d tương ứng với những gì trong hình ảnh. Tôi đã để việc triển khai FromHSL tùy thuộc vào bạn, cũng như cách nhận được từ mảng này đến một hình ảnh thực tế:

const int size = 1000; 
const double ratio = 1.0/size; 
const double saturation = 1.0; 
Color[,] colors = new Color[size,size]; 
for (int i = 0; i < size; i++) 
{ 
    double lightness = 1.0 - i*ratio; 
    for (int j = 0; j < size; j++) 
    { 
     double hue = j*ratio; 
     colors[i, j] = FromHSL(hue, saturation, lightness); 
    } 
} 
4

Hình ảnh này là một HSL (không HSV, trắng là không gian màu S = 0 in HSV), với S ở 100%, H trên trục hoành và L trên trục tung. (Độ dốc màu xám là S = 0) Bạn có thể sử dụng các chuyển đổi tại http://www.bobpowell.net/RGBHSB.htm và chỉ lặp qua tất cả các pixel trong hình chữ nhật của mình.

Là một bảng màu mắt đơn giản, điều này mang đến cho bạn màu sắc hoàn toàn bão hòa (và xám, với bit ở bên phải).

Bộ chọn màu cửa sổ, để so sánh, đặt S trên trục thẳng đứng (với L = 50%) trong hình vuông lớn, dẫn đến màu xám ở dưới cùng với một thanh trượt riêng biệt cho L. Điều này ít hữu ích hơn như một eyedropper bảng màu. Một hình thức chọn màu khác thường thấy là vòng tròn có màu xung quanh hình tròn và độ bão hòa làm bán kính (thường là màu trắng ở giữa, bằng cách sử dụng HSV với V = 100 và một thanh trượt riêng cho giá trị)

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