Я написал метод применения градиента для трех цветов к изображению. Цвета - синий-> желтый-> красный. Я получаю плавный переход в цвета от желтого до красного, но если яркость ниже 0,5, переход от синего -> желтый с ударами от синего до зеленого до желтого, поэтому он не является гладким вообще. Я хотел бы иметь тепловое зрение, подобное эффекту на изображении.Применение цветовой интерполяции на изображении
Я не знаю, что я делаю неправильно, я написал метод ниже. Я вычисляю яркость исходного пикселя для применения к цветному шаблону.
public void applyGradient()
{
size = width * height;
float r, g, b;
float redTemp, yellowTemp, blueTemp;
float luminance = 0;
float result;
index = 0;
redTemp = 0xff000000 | (255 << 16) | (0 << 8) | 0;
yellowTemp = 0xff000000 | (255 << 16) | (255 << 8) | 0;
blueTemp = 0xff000000 | (0 << 16) | (0 << 8) | 255;
while(index < size)
{
r = (rgbInput[index]& 0x00FF0000) >> 16;
g = (rgbInput[index]& 0x0000FF00) >> 8;
b = (rgbInput[index]& 0x000000FF);
luminance = ((r+b+g)/3)/255;
if (luminance < 0.5)
{
result = (float) ((yellowTemp * luminance * 2.0) + blueTemp * (0.5 - luminance) * 2.0);
}
else
{
result = (float) (redTemp * (luminance - 0.5) * 2.0 + yellowTemp * (1.0 - luminance) * 2.0);
}
output[index] = (int)result;
index++;
}
}
Я узнал, что если бы я сделал все переменные, то я получаю хорошее распределение от желтого до красного, если яркость> 0,5. Но если он ниже, и он должен идти от синего до желтого, я получаю цветные удары от синего до зеленого до желтого. Как я могу плавно перейти от синего до желтого: s. От желтого до красного, похоже, не проблема. – LordrAider
Ваши расчеты от желтого до красного отличаются от ваших расчетов от синего до желтого. Попробуйте: result = (int) ((yellowTemp * (1.0- яркость) * 2.0) + blueTemp * (0.5 - яркость) * 2.0); или некоторые изменения этого. –
не работает также :(Должно быть что-то другое при переходе от желтого до красного и от синего до желтого. Thx в любом случае :). – LordrAider