2012-01-05 20 views
6

thể trùng lặp:
given a background color, how to get a foreground color that make it readable on that background color?Tự động xác định fontcolor tối ưu bởi backgroundcolor

Tôi tự hỏi, nếu có bất kỳ thuật toán để xác định fontcolor tối ưu để có thể đọc bởi màu nền của nó.

Ví dụ: Tôi tạo biểu tượng có văn bản và màu động. Nếu màu sắc là kinda tối, tôi muốn nó để thiết lập các màu phông chữ trắng và nếu nó khá sáng, tôi muốn nó có màu đen (hoặc thậm chí có thể màu xám).

public DynamicIcon(String iconText, Color backgroundColor) 
    { 
    this.iconText = iconText; 
    this.backgroundColor = backgroundColor; 

    this.fontColor = determineFontColor(backgroundColor); 
    } 

    //This is what I need (Pseudocode): 
    private fontColor determineFontColor(Color backgroundColor) 
    { 
    if(backgroundColor == bright) 
     return Color.BLACK; 
    if(backgroundColor == dark) 
     return Color.WHITE; 
    //If possible: 
    if(backgroundColor == somethingInBetween) 
     return Color.GRAYISH; 
    } 

Đáng tiếc là tôi không tìm thấy bất kỳ thuật toán nào như vậy, dù sao tôi chắc chắn rằng nó đã tồn tại. Bất cứ ai có bất kỳ ý tưởng?

cảm ơn, ymene

Trả lời

1

Chúng tôi đã phải làm một cái gì đó như thế trên hệ thống của chúng tôi: dựa trên nền, chúng ta tô màu phông chữ màu đen hoặc trắng. Các giải pháp chúng tôi tìm thấy là không hoàn hảo và chọn màu sắc sai trong một số trường hợp hiếm hoi, nhưng chúng tôi rất hài lòng với nó.

Đây là những gì chúng tôi đã làm:

int red = 0; 
int green = 0; 
int blue = 0; 

if (backgroundColor.red + backgroundColor.green + backgroundColor.blue < 383) { 
    red = 255; 
    green = 255; 
    blue = 255; 
} 

Và sau đó chúng tôi sử dụng red, greenblue giá trị để tạo một đối tượng mới Color.

Số ma thuật 383 là kết quả của (255 + 255 + 255)/2

+1

cảm ơn bạn đã chia sẻ ý tưởng của mình. Tôi sẽ thử nó. Có thể đủ tốt cho tôi. – crusam

+0

rgb (191,87,218) là một màu tím khá OSX sử dụng cho màu nền danh sách lựa chọn (chúng sử dụng màu trắng cho màu nền trước văn bản.) 191 + 87 + 218 = 496, vì vậy thuật toán này sẽ xác định nó là "ánh sáng" . Một giải pháp khác mà tôi có, là để chuyển đổi sang HSB và sau đó sử dụng giá trị B làm điểm ngắt, thất bại trên cùng một ví dụ. – Trejkaz

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