By "màu" chúng ta thường có nghĩa là 24 -bit RGB màu: 1 byte (8 bit) cho màu đỏ, xanh lá cây, xanh dương. Tức là, mỗi kênh có giá trị từ 0-255 hoặc 0x00 đến 0xff trong màn hình thập lục phân.
Màu trắng là tất cả các kênh đầy đủ: #FFFFFF, màu đen là tất cả các kênh bị tắt: # 000000. Rõ ràng, màu sáng hơn có nghĩa là các giá trị cao hơn trong các kênh, màu tối hơn có nghĩa là các giá trị thấp hơn trong các kênh.
Làm thế nào chính xác bạn chọn thuật toán của bạn là tùy thuộc vào bạn, đơn giản sẽ là:
//pseudo-code
if (red + green + blue <= (0xff * 3)/2) //half-down, half-up
fontcolor = white;
else
fontcolor = black;
Edit: Người hỏi yêu cầu ví dụ hoàn chỉnh hơn, vì vậy anh/cô ấy có thể có sự khởi đầu tốt hơn, vì vậy ở đây nó là:
public static void main(String[] args) throws IOException {
String value =
// new Scanner(System.in).nextLine(); //from input
"#112233"; //from constant
int red = Integer.parseInt(value.substring(1, 1 + 2), 16);
int green = Integer.parseInt(value.substring(3, 3 + 2), 16);
int blue = Integer.parseInt(value.substring(5, 5 + 2), 16);
System.out.println("red = " + Integer.toHexString(red)
+ ", green = " + Integer.toHexString(green)
+ ", blue = " + Integer.toHexString(blue));
if (red + green + blue <= 0xff * 3/2)
System.out.println("using white color #ffffff");
else
System.out.println("using black color #000000");
String colorBackToString = "#" + Integer.toHexString(red) +
Integer.toHexString(green) +
Integer.toHexString(blue);
System.out.println("color was " + colorBackToString);
}
Nó tạo ra:
red = 11, green = 22, blue = 33
using white color #ffffff
color was #112233
Và hiển thị kỹ thuật tách màu theo định dạng #aabbcc thành kênh rgb, tham gia sau (nếu cần), v.v.
Tôi nghĩ bạn nên cố gắng hoạt Javascript để đạt được điều này. –
bạn có thể cắt nhanh bằng cách sử dụng nghịch đảo màu của bạn - do đó bạn có thể chắc chắn rằng văn bản luôn hiển thị * inverted_color = giá trị hex của FFFFFF - your_color * – Lucius