Пожалуйста, обратитесь к следующему коду, который может вам помочь.
public static Method method[];
public static MethodClass obj;
public static String testMethod="A";
public static void main(String args[])
{
obj=new MethodClass();
method=obj.getClass().getMethods();
try
{
for(int i=0;i<method.length;i++)
{
String name=method[i].getName();
if(name==testMethod)
{
method[i].invoke(name,"Test Parameters of A");
}
}
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
}
Спасибо ....
Я сделал порт превосходной библиотеки xcolor, чтобы удалить его зависимость jQuery. Там есть множество функций, включая светящиеся и затемняющие цвета.
Действительно, преобразование hex в RGB является полностью отдельной функцией от осветления или затемнения цветов. Держите вещи DRY, пожалуйста. В любом случае, если у вас есть цвет RGB, вы можете просто добавить разницу между уровнем освещенности и уровнем освещенности, который у вас есть для каждого из значений RGB:
var lightness = function(level) {
if(level === undefined) {
return Math.max(this.g,this.r,this.b)
} else {
var roundedLevel = Math.round(level) // fractions won't work here
var levelChange = roundedLevel - this.lightness()
var r = Math.max(0,this.r+levelChange)
var g = Math.max(0,this.g+levelChange)
var b = Math.max(0,this.b+levelChange)
if(r > 0xff) r = 0xff
if(g > 0xff) g = 0xff
if(b > 0xff) b = 0xff
return xolor({r: r, g: g, b: b})
}
}
var lighter = function(amount) {
return this.lightness(this.lightness()+amount)
}
См. https://github.com/fresheneesz/xolor для большей части источника.
Вы подумали о преобразовании rgb> hsl? то просто переместите Светимость вверх и вниз? Вот как я поеду.
Быстрый поиск некоторых алгоритмов позволил мне получить следующие сайты.
PHP: http://serennu.com/colour/rgbtohsl. php
Javascript: http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms -in-javascript
ИЗМЕНИТЬ ссылку, указанную выше, больше не действительна. Вы можете просмотреть git-концентратор для источника страницы или gist
. Альтернативно, другой вопрос StackOverflow может быть хорошим местом для Посмотрите.
Несмотря на то, что это неправильный выбор для OP, это приближение кода, который я изначально предлагал. (Предполагая, что у вас есть функции преобразования rgb / hsl)
var SHADE_SHIFT_AMOUNT = 0.1;
function lightenShade(colorValue)
{
if(colorValue && colorValue.length >= 6)
{
var redValue = parseInt(colorValue.slice(-6,-4), 16);
var greenValue = parseInt(colorValue.slice(-4,-2), 16);
var blueValue = parseInt(colorValue.slice(-2), 16);
var hsl = rgbToHsl(redValue, greenValue, blueValue);
hsl[2]= Math.min(hsl[2] + SHADE_SHIFT_AMOUNT, 1);
var rgb = hslToRgb(hsl[0], hsl[1], hsl[2]);
return "#" + rgb[0].toString(16) + rgb[1].toString(16) + rgb[2].toString(16);
}
return null;
}
function darkenShade(colorValue)
{
if(colorValue && colorValue.length >= 6)
{
var redValue = parseInt(colorValue.slice(-6,-4), 16);
var greenValue = parseInt(colorValue.slice(-4,-2), 16);
var blueValue = parseInt(colorValue.slice(-2), 16);
var hsl = rgbToHsl(redValue, greenValue, blueValue);
hsl[2]= Math.max(hsl[2] - SHADE_SHIFT_AMOUNT, 0);
var rgb = hslToRgb(hsl[0], hsl[1], hsl[2]);
return "#" + rgb[0].toString(16) + rgb[1].toString(16) + rgb[2].toString(16);
}
return null;
}
Это предполагает:
hslToRgb
и rgbToHsl
. colorValue
представляет собой строку в форме #RRGGBB . Хотя, если мы обсуждаем css, существует синтаксис для указания hsl / hsla для IE9 / Chrome / Firefox.
Я попробовал вашу функцию, и была небольшая ошибка: если какое-то окончательное значение «r» имеет только 1 цифру, результат возникает, например: «a0a0a», когда правое значение - «0a0a0a», например. Я просто быстро исправил это, добавив это вместо вашего возвращения:
var rStr = (r.toString(16).length < 2)?'0'+r.toString(16):r.toString(16);
var gStr = (g.toString(16).length < 2)?'0'+g.toString(16):g.toString(16);
var bStr = (b.toString(16).length < 2)?'0'+b.toString(16):b.toString(16);
return (usePound?"#":"") + rStr + gStr + bStr;
Возможно, это не так приятно, но это делает работу. Отличная функция, BTW. Только то, что мне было нужно. :)
Я сделал решение, которое работает очень хорошо для меня:
function shadeColor(color, percent) {
var R = parseInt(color.substring(1,3),16);
var G = parseInt(color.substring(3,5),16);
var B = parseInt(color.substring(5,7),16);
R = parseInt(R * (100 + percent) / 100);
G = parseInt(G * (100 + percent) / 100);
B = parseInt(B * (100 + percent) / 100);
R = (R<255)?R:255;
G = (G<255)?G:255;
B = (B<255)?B:255;
var RR = ((R.toString(16).length==1)?"0"+R.toString(16):R.toString(16));
var GG = ((G.toString(16).length==1)?"0"+G.toString(16):G.toString(16));
var BB = ((B.toString(16).length==1)?"0"+B.toString(16):B.toString(16));
return "#"+RR+GG+BB;
}
Пример Lighten:
shadeColor("#63C6FF",40);
Пример Darken:
shadeColor("#63C6FF",-40);
R = ((R<255)?R:255).toString(16);
, затем R = R.length==1 ? "0"+R : R
для скорости. И я не уверен, что точка toUpperCase?
– Pimp Trizkit
23 November 2012 в 23:15
Следующий способ позволит вам осветлить или затемнить значение экспозиции шестнадцатеричной (Hex) цветовой строки:
private static string GetHexFromRGB(byte r, byte g, byte b, double exposure)
{
exposure = Math.Max(Math.Min(exposure, 1.0), -1.0);
if (exposure >= 0)
{
return "#"
+ ((byte)(r + ((byte.MaxValue - r) * exposure))).ToString("X2")
+ ((byte)(g + ((byte.MaxValue - g) * exposure))).ToString("X2")
+ ((byte)(b + ((byte.MaxValue - b) * exposure))).ToString("X2");
}
else
{
return "#"
+ ((byte)(r + (r * exposure))).ToString("X2")
+ ((byte)(g + (g * exposure))).ToString("X2")
+ ((byte)(b + (b * exposure))).ToString("X2");
}
}
Для последнего значения параметра в GetHexFromRGB (), передать двойное значение где-то между -1 и 1 (-1 - черный, 0 не изменяется, 1 - белый):
// split color (#e04006) into three strings
var r = Convert.ToByte("e0", 16);
var g = Convert.ToByte("40", 16);
var b = Convert.ToByte("06", 16);
GetHexFromRGB(r, g, b, 0.25); // Lighten by 25%;
Как простой цвет тени в PHP?
<?php
function shadeColor ($color='#cccccc', $percent=-25) {
$color = Str_Replace("#",Null,$color);
$r = Hexdec(Substr($color,0,2));
$g = Hexdec(Substr($color,2,2));
$b = Hexdec(Substr($color,4,2));
$r = (Int)($r*(100+$percent)/100);
$g = (Int)($g*(100+$percent)/100);
$b = (Int)($b*(100+$percent)/100);
$r = Trim(Dechex(($r<255)?$r:255));
$g = Trim(Dechex(($g<255)?$g:255));
$b = Trim(Dechex(($b<255)?$b:255));
$r = ((Strlen($r)==1)?"0{$r}":$r);
$g = ((Strlen($g)==1)?"0{$g}":$g);
$b = ((Strlen($b)==1)?"0{$b}":$b);
return (String)("#{$r}{$g}{$b}");
}
echo shadeColor(); // #999999
Я хотел изменить цвет на определенный уровень яркости - независимо от того, какой яркостью был цвет раньше - вот простая функция JS, которая, кажется, работает хорошо, хотя я уверен, что она может быть короче
function setLightPercentage(col: any, p: number) {
const R = parseInt(col.substring(1, 3), 16);
const G = parseInt(col.substring(3, 5), 16);
const B = parseInt(col.substring(5, 7), 16);
const curr_total_dark = (255 * 3) - (R + G + B);
// calculate how much of the current darkness comes from the different channels
const RR = ((255 - R) / curr_total_dark);
const GR = ((255 - G) / curr_total_dark);
const BR = ((255 - B) / curr_total_dark);
// calculate how much darkness there should be in the new color
const new_total_dark = ((255 - 255 * (p / 100)) * 3);
// make the new channels contain the same % of available dark as the old ones did
const NR = 255 - Math.round(RR * new_total_dark);
const NG = 255 - Math.round(GR * new_total_dark);
const NB = 255 - Math.round(BR * new_total_dark);
const RO = ((NR.toString(16).length === 1) ? "0" + NR.toString(16) : NR.toString(16));
const GO = ((NG.toString(16).length === 1) ? "0" + NG.toString(16) : NG.toString(16));
const BO = ((NB.toString(16).length === 1) ? "0" + NB.toString(16) : NB.toString(16));
return "#" + RO + GO + BO;}
p
имеет диапазон 0-100
? Я даже не знаю, как правильно определить яркость в RGB, это вещь HSL. Например, #FF00FF
ярче, чем #FF0000
? Если это так, это означает, что пурпурный цвет в два раза ярче красного. Поэтому используется тест на чистый красный цвет. Переходите в чистый красный #FF0000
, установите на 50% яркость, и вот мы получим #FF4040
, верно? Я бы предположил, что я должен сделать красную 50% -ную яркость, мы стали бы темнее, увидев, что ее уже полностью яркая, как в #800000
или 150% яркости будет #FF8080
. Является ли розовый ярче красного? или красный уже полностью яркий?
– Pimp Trizkit
7 March 2018 в 17:46
L
будет буквально яркостью. Моя [личная психическая] проблема здесь в том, что для меня #FF0000
полностью яркий. И #FF4040
легче, но не ярче .... мне легче подходит ближе к белому, как розовый. И яркость - это то, насколько она добралась, и ее полный красный, такой красный, яркий. Поэтому #FF0000
нельзя сделать ярче .. но скорее .. легче ... может быть, я просто урод, LOL !! Я действительно не знаю теорию цвета, ооооооооооооооооооооооооооооооо!
– Pimp Trizkit
8 March 2018 в 18:48
C # Version ... обратите внимание, что я получаю строки цвета в этом формате # FF12AE34, и вам нужно вырезать #FF.
private string GetSmartShadeColorByBase(string s, float percent)
{
if (string.IsNullOrEmpty(s))
return "";
var r = s.Substring(3, 2);
int rInt = int.Parse(r, NumberStyles.HexNumber);
var g = s.Substring(5, 2);
int gInt = int.Parse(g, NumberStyles.HexNumber);
var b = s.Substring(7, 2);
int bInt = int.Parse(b, NumberStyles.HexNumber);
var t = percent < 0 ? 0 : 255;
var p = percent < 0 ? percent*-1 : percent;
int newR = Convert.ToInt32(Math.Round((t - rInt) * p) + rInt);
var newG = Convert.ToInt32(Math.Round((t - gInt) * p) + gInt);
var newB = Convert.ToInt32(Math.Round((t - bInt) * p) + bInt);
return String.Format("#{0:X2}{1:X2}{2:X2}", newR, newG, newB);
}
int
и два vars
для одного и того же типа данных.
– Pimp Trizkit
25 September 2014 в 08:03
Я давно хотел иметь возможность создавать оттенки / оттенки цветов, вот мое решение для JavaScript:
const varyHue = function (hueIn, pcIn) {
const truncate = function (valIn) {
if (valIn > 255) {
valIn = 255;
} else if (valIn < 0) {
valIn = 0;
}
return valIn;
};
let red = parseInt(hueIn.substring(0, 2), 16);
let green = parseInt(hueIn.substring(2, 4), 16);
let blue = parseInt(hueIn.substring(4, 6), 16);
let pc = parseInt(pcIn, 10); //shade positive, tint negative
let max = 0;
let dif = 0;
max = red;
if (pc < 0) { //tint: make lighter
if (green < max) {
max = green;
}
if (blue < max) {
max = blue;
}
dif = parseInt(((Math.abs(pc) / 100) * (255 - max)), 10);
return leftPad(((truncate(red + dif)).toString(16)), '0', 2) + leftPad(((truncate(green + dif)).toString(16)), '0', 2) + leftPad(((truncate(blue + dif)).toString(16)), '0', 2);
} else { //shade: make darker
if (green > max) {
max = green;
}
if (blue > max) {
max = blue;
}
dif = parseInt(((pc / 100) * max), 10);
return leftPad(((truncate(red - dif)).toString(16)), '0', 2) + leftPad(((truncate(green - dif)).toString(16)), '0', 2) + leftPad(((truncate(blue - dif)).toString(16)), '0', 2);
}
};
#
шестнадцатеричных цветов. Извините, если это похоже на ... «утверждение» ... Я видел это как экспертный обзор. Если вы не хотите, чтобы кто-то анализировал ваш код или предлагал обратную связь, я приношу свои извинения.
– Pimp Trizkit
29 August 2017 в 13:01
Это то, что я использовал на основе вашей функции. Я предпочитаю использовать шаги по проценту, потому что это более интуитивно понятно для меня.
Например, 20% синего значения 200 сильно отличаются от 20% от синего значения 40.
В любом случае, вот моя модификация, спасибо за вашу оригинальную функцию.
function adjustBrightness(col, amt) {
var usePound = false;
if (col[0] == "#") {
col = col.slice(1);
usePound = true;
}
var R = parseInt(col.substring(0,2),16);
var G = parseInt(col.substring(2,4),16);
var B = parseInt(col.substring(4,6),16);
// to make the colour less bright than the input
// change the following three "+" symbols to "-"
R = R + amt;
G = G + amt;
B = B + amt;
if (R > 255) R = 255;
else if (R < 0) R = 0;
if (G > 255) G = 255;
else if (G < 0) G = 0;
if (B > 255) B = 255;
else if (B < 0) B = 0;
var RR = ((R.toString(16).length==1)?"0"+R.toString(16):R.toString(16));
var GG = ((G.toString(16).length==1)?"0"+G.toString(16):G.toString(16));
var BB = ((B.toString(16).length==1)?"0"+B.toString(16):B.toString(16));
return (usePound?"#":"") + RR + GG + BB;
}