Số lượng yếu tố có thể có giới hạn thấp hợp lý không? Một giải pháp nhanh chóng và dễ dàng là chỉ lưu trữ một mảng các giá trị màu bằng cách sử dụng ID của mục. Điều đó giả định rằng bạn có số lượng màu tương đối thấp và bạn chắc chắn rằng bạn sẽ không vượt quá một số mục nhất định.
Nếu bạn muốn tạo ra màu sắc thay vì sử dụng danh sách, một mẹo để làm cho chúng có giao diện nhất quán và phù hợp là tạo chúng bằng HSB. Xác định trước độ sáng và độ bão hòa, sau đó căn cứ giá trị màu khỏi một số chức năng của ID (điều này có thể là nhiều thứ tùy thuộc vào số lượng ID bạn dự định có, nhưng nhân ID với một số tiền (và sửa đổi khi vượt quá 255!) Là một cách tiếp cận thô ráp tốt Với cách tiếp cận này, tất cả các màu sắc sẽ “căn chỉnh” về độ bão hòa và độ sáng nhưng mỗi màu sẽ có một màu riêng biệt. quất cùng một giải pháp nhanh chóng:.
class HsbColor
{
public int Hue { get; set; }
public int Saturation { get; set; }
public int Brightness { get; set; }
public Color ToRGB
{
// left as exercise to the reader...
}
}
public class Item
{
public int Id { get; set; }
private static const byte EXPECTED_MAX = 15;
private static int HUE_FACTOR = 255/EXPECTED_MAX;
public HsbColor Color
{
get {
var color = new HsbColor() { Saturation = 175, Brightness = 175 };
color.Hue = (Id * HUE_FACTOR) % 255;
return color;
}
}
}
Nguồn
2009-07-22 21:14:09
Xem câu trả lời của tôi cho một cách để tránh dự đoán EXPECTED_MAX và vẫn nhận được một phân bố. –