работает хорошо

у, чтобы цвет шрифта на моей html-странице изменился на черный, если цвет фона строки светлый, и черный, если фон белый

Я использую JSP на моей странице. есть ли способ сказать что-то подобное

если цвет <## 0686FF, то fontcolour = # 000000, например

редактировать: ищу скриптлет или javascript

 Lucius13 янв. 2011 г., 13:04
Вы можете сократить его, используя инверсию вашего цвета - таким образом, вы можете быть уверены, что текст всегда виденinverted_color = шестнадцатеричное значение FFFFFF - your_color
 Harry Joy13 янв. 2011 г., 12:54
Я думаю, что вы должны попробовать JavaScript, чтобы достичь этого.

Ответы на вопрос(4)

1 байт (8 бит) для красного, зеленого и синего. То есть каждый канал имеет значение от 0 до 255 или от 0x00 до 0xff в шестнадцатеричном формате.

Белый цвет - все каналы заполнены: #FFFFFF, черный - все каналы выключены: # 000000. Очевидно, что более светлый цвет означает более высокие значения в каналах, более темный цвет означает более низкие значения в каналах.

Как именно вы выбираете свой алгоритм, зависит только от вас:

//pseudo-code
if (red + green + blue <= (0xff * 3) / 2) //half-down, half-up
  fontcolor = white;
else
  fontcolor = black;

Редактировать: asker просит привести более полный пример, чтобы он мог начать лучше, так что вот оно:

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);
}

Он производит вывод:

red = 11, green = 22, blue = 33
using white color #ffffff
color was #112233

И показывает технику разделения цвета в формате #aabbcc на каналы rgb, последующего их соединения (при необходимости) и т. Д.

 code51178846554144113 янв. 2011 г., 13:13
это на веб-странице, как он узнает, что такое 0xff. я имею дело с простудой как # 000000
 peenut13 янв. 2011 г., 16:27
более простой способ, чем несколько строк кода ?! что на земле может быть проще?
 code51178846554144113 янв. 2011 г., 13:36
спасибо за ответ, но разве нет более простого способа, я просто хочу скриптлет или javascript на своей странице сам
 peenut13 янв. 2011 г., 13:27
хорошо, я добавил пример с не псевдокодом :-)
 peenut13 янв. 2011 г., 13:17
попробуйте прочитать какой-нибудь учебник о Java, JSP, это простое кодирование

нства HSL. Вы можете использовать третий компонент («легкость»), чтобы выяснить, насколько светлый цвет. Это будет работать для большинства целей.

Множество описаний тамприбегая к помощи, В основном вы берете компонент цвета с самым высоким значением (скажем, красный) и компонент с самым низким (скажем, зеленый). В этом случае:

L = (red + green) / (255*2.0)

Предполагая, что вы извлекли свои цвета как значения от 0 до 255. Вы получите значение от 0 до 1. Светлый цвет может быть любым цветом с яркостью выше определенного произвольного значения (например, 0,6).

 wds13 янв. 2011 г., 14:33
@ Дюны, ну ладно, я все равно +1 тебе за использованиеColor API. Мне было лень это искать. :-)
 Dunes13 янв. 2011 г., 14:17
Ой, не заметил, что вы уже упомянули HSL.
function isTooLightYIQ(hexcolor)
{
      var r = parseInt(hexcolor.substr(0,2),16);
      var g = parseInt(hexcolor.substr(2,2),16);
      var b = parseInt(hexcolor.substr(4,2),16);
      var yiq = ((r*299)+(g*587)+(b*114))/1000;
      return yiq >= 128;
}

http://www.careerbless.com/services/css/csstooltipcreator.php работает хорошо

Решение Вопроса

java.awt.Color класс, чтобы получить значение яркости цвета и использовать его, чтобы определить, какой цвет фона следует использовать.

редактировать: это решение отличается от некоторых других решений, потому что другие решения будут считать некоторые яркие цвета темными, например. основной красный (# FF0000). Принимая во внимание, что это решение, будет считать основной красный цвет одним из самых ярких цветов, которые вы можете иметь. Я полагаю, это зависит от ваших предпочтений. Вы хотите прочитать красный на черном или красный на белом?

String fontColor = "#0cf356";

// remove hash character from string
String rawFontColor = fontColor.substring(1,fontColor.length());

// convert hex string to int
int rgb = Integer.parseInt(rawFontColor, 16);

Color c = new Color(rgb);

float[] hsb = Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), null);

float brightness = hsb[2];

if (brightness < 0.5) {
   // use a bright background
} else {
   // use a dark background
}

HSB означает Hue, Saturation, Brightness - яркость также известна как яркость. При значениях класса Color от 1 до 0. Следовательно, 0,5 яркости - это половина расстояния между самыми яркими цветами и самыми темными цветами).

Взаимодействие между оттенком, насыщенностью и яркостью немного сложнее, чем красный, синий и зеленый. использованиеэто инструмент экспериментирует с разными цветами и находит связи между RGB и HSB

 code51178846554144113 янв. 2011 г., 15:41
также с вашим кодом яркость зеленого цвета (# 45A61F) получается ярче синего (# 99CCCC) как это исправить
 code51178846554144113 янв. 2011 г., 15:32
Отлично работает хорошо. Можете ли вы сказать мне, что означает 0,5. какого цвета это будет?
 Dunes13 янв. 2011 г., 15:54
Уверены насчет зеленого и синего. Я быстро запустил программу, и она дает яркость 0,8 для синего и 0,65 для зеленого. (Где 1 - самый яркий, а 0 - самый темный). Добавим правку о том, что означает hsb и 0.5.
 code51178846554144113 янв. 2011 г., 16:24
Теперь я понимаю, большое спасибо! отличный кусок кода!

Ваш ответ на вопрос