Tôi đang giới thiệu chức năng "gắn thẻ" trong ứng dụng của mình và một trong những cách tôi cho phép hiển thị thẻ là đặt văn bản thành màu mà người dùng đã chọn cho mỗi thẻ. Ứng dụng của tôi có ba chủ đề với nền màu trắng, đen và nâu giống như notepad (những thứ này có thể thay đổi/phát triển trong tương lai). Tôi muốn có thể hiển thị thẻ ở màu gốc nếu nó dễ dàng tương phản nền và chỉ sử dụng màu văn bản mặc định cho mỗi chủ đề khác.Android/Java: Xác định xem màu chữ sẽ hòa trộn với nền không?
Tôi đã viết chức năng trợ giúp để xác định xem văn bản có bị che hay không, nhưng nó không đúng 100% (tôi muốn nó xác định xem màu sẽ được che mặt dựa trên cả ba thành phần hsv và phải bây giờ so sánh độ bão hòa không hợp lệ). Mã dưới đây.
public static boolean colorWillBeMasked(int color, Application app){
float[] hsv = new float[3];
Color.colorToHSV(color, hsv);
//note 0, black 1, white 2
int theme = app.api.getThemeView();
System.out.println("h=" +hsv[0]+ ", s=" +hsv[1]+ ", v=" +hsv[2]+", theme="+theme);
if(android.R.color.transparent == color) return true;
// color is dark
if(hsv[2] <= .2){
if(theme == 1) return true;
}
// color is light
else if(hsv[2] >= .8) {
if(theme == 2) return true;
}
return false;
}
Khi gọi chức năng này với màu xanh, đỏ, trong suốt, đen, vàng và xanh lá cây đầu ra là như sau (theo thứ tự):
- h = 0.0, s = 1.0, v = 1.0, theme = 1
- h = 229,41177, s = 1.0, v = 1,0, chủ đề = 1
- h = 267,6923, s = 1.0, v = 0,050980393, chủ đề = 1
- h = 0.0, s = 0,0, v = 0.0, chủ đề = 1
- h = 59.529 41, s = 1.0, v = 1,0, chủ đề = 1
- h = 111,29411, s = 1.0, v = 1,0, chủ đề = 1
Câu hỏi của tôi là: dựa trên màu sắc, độ bão hòa và giá trị, làm thế nào bạn có thể xác định xem văn bản được tô màu theo một cách nào đó sẽ hiển thị trên nền trắng so với nền màu đen hoặc nếu nó sẽ bị che khuất? Hãy lấy thuật toán của tôi và cải thiện nó hoặc giúp tôi tạo một thuật toán mới.
Xin cảm ơn trước.
Cảm ơn bạn vì điều gì? Bạn thậm chí không hỏi một câu hỏi, nhưng tuy nhiên: Bạn được chào đón. – Stephan
Cập nhật văn bản, xin lỗi tôi không rõ ràng. – Blaskovicz