สร้างสีระหว่างสีแดงกับสีเขียวเพื่อเป็นมิเตอร์ไฟฟ้าหรือไม่?


137

ฉันกำลังเขียนเกม Java และฉันต้องการใช้ power meter สำหรับการที่จะถ่ายอะไรซักอย่าง

ฉันจำเป็นต้องเขียนฟังก์ชั่นที่ใช้ int ระหว่าง 0 - 100 และขึ้นอยู่กับว่าตัวเลขนั้นสูงแค่ไหนมันจะคืนค่าสีระหว่างสีเขียว (0 ในระดับพลังงาน) และสีแดง (100 ในระดับพลังงาน)

คล้ายกับการทำงานของตัวควบคุมระดับเสียง:
การควบคุมระดับเสียง

ฉันต้องดำเนินการอะไรบ้างกับองค์ประกอบสีแดงสีเขียวและสีน้ำเงินเพื่อสร้างสีระหว่างสีเขียวและสีแดง

ดังนั้นฉันสามารถเรียกใช้พูดgetColor(80)และมันจะกลับสีส้ม (ค่าของมันใน R, G, B) หรือgetColor(10)ที่จะกลับค่า RGB เขียว / เหลืองมากขึ้น

ฉันรู้ว่าฉันต้องเพิ่มองค์ประกอบของค่า R, G, B สำหรับสีใหม่ แต่ฉันไม่ทราบว่ามีอะไรเพิ่มขึ้นหรือลดลงโดยเฉพาะเมื่อสีเปลี่ยนจากสีเขียว - แดง


ความคืบหน้า:

ฉันลงเอยด้วยการใช้พื้นที่สี HSV / HSB เพราะฉันชอบการไล่สีที่ดีกว่า (ไม่มีสีน้ำตาลเข้มอยู่ตรงกลาง)

ฟังก์ชั่นที่ฉันใช้คือ:

public Color getColor(double power)
{
    double H = power * 0.4; // Hue (note 0.4 = Green, see huge chart below)
    double S = 0.9; // Saturation
    double B = 0.9; // Brightness

    return Color.getHSBColor((float)H, (float)S, (float)B);
}

โดยที่ "power" คือตัวเลขระหว่าง 0.0 ถึง 1.0 0.0 จะกลับมาเป็นสีแดงสด 1.0 จะกลับมาเป็นสีเขียวสดใส

แผนภูมิ Java Hue:
แผนภูมิ Java Hue


ก่อนหน้านี้ฉันเคยถามคำถามเดียวกัน (คล้ายกันมาก) ที่นี่: http://stackoverflow.com/questions/168838/color-scaling-function
Tomas Pajonk

2
คุณไม่ควรคว่ำไฟ? สมมติว่าสีแดงเป็น Hit ที่สูงที่สุดและคุณทำงานระหว่าง 0.1 และ 0.4 ยิ่งพลังยิ่งสูงยิ่ง H
Adriaan Davel

คุณใช้ OpenGL หรือไม่ เนื่องจากมีวิธีการตั้งค่าจุดของรูปสามเหลี่ยมเป็นสีที่แตกต่างกันและจากนั้นผสม / ไล่ระดับสีระหว่างพวกเขา คุณอาจได้ประสิทธิภาพที่ดีขึ้นโดยขอให้กราฟิกการ์ดทำงานให้คุณ นอกจากนี้รหัสอาจจะง่ายขึ้น / ปรับตัวได้มากขึ้น (พูดว่าถ้าคุณต้องการให้มิเตอร์ไฟฟ้าของมนุษย์ต่างดาวเปลี่ยนจากสีเขียวเป็นสีน้ำเงิน)
DarcyThomas

คำตอบ:


203

สิ่งนี้ควรใช้งาน - เพียงแค่ปรับค่าสีแดงและสีเขียวเป็นเส้นตรง สมมติว่าค่าสูงสุดแดง / เขียว / น้ำเงินของคุณคือ255และnอยู่ในช่วง0 .. 100

R = (255 * n) / 100
G = (255 * (100 - n)) / 100 
B = 0

(แก้ไขสำหรับเลขจำนวนเต็ม, ส่วนปลายของหมวกถึง Ferrucio)

อีกวิธีที่จะทำคือใช้โมเดลสี HSVและวนสีจาก0 degrees(สีแดง) เป็น120 degrees(สีเขียว) ด้วยความอิ่มตัวและค่าที่เหมาะสมกับคุณ นี่ควรให้การไล่ระดับสีที่น่าพอใจยิ่งขึ้น

นี่คือการสาธิตของแต่ละเทคนิค - การไล่ระดับสีชั้นนำใช้ RGB ส่วนล่างใช้ HSV:

http://i38.tinypic.com/29o0q4k.jpg


20
มันดีกว่ามากที่ทำสิ่งนี้ในพื้นที่ HSV
DJClayworth

@DJClayworth ใช่ฉันไปด้วย HSV
mmcdole

+1; ฉันจะถามคำถามใหม่เกี่ยวกับวิธีการปรับปรุงอัลกอริทึมสีที่ฉันมีสำหรับการระบายสีแผนภูมิแท่งใน HTML / PHP ... ดังนั้นแนะนำคำถามนี้เหมือนกันและคำตอบของคุณช่วยฉันแก้ไขปัญหาโดยไม่ต้องถามคำถาม! ขอบคุณ!
beggs

คุณจะเขียนฟังก์ชั่นที่ทำงานกับค่าสีได้อย่างไร? สมมติว่าคำนวณสีระหว่าง RGB 20,30,190 และ RBG 69,190,10 หรือไม่
Kokodoko

1
เทคนิคเดียวกัน - เพื่อย้ายจากค่า X ไปยังค่า Y ในขั้นตอน N แต่ละขั้นตอนที่คุณเพิ่ม X โดย (YX) / N - แม้ว่ามันจะดูดีขึ้นหากคุณย้ายในพื้นที่ HSV แทนที่จะเป็น RGB
Paul Dixon

32

ปิดส่วนหัวของฉันนี่คือการเปลี่ยนสีเขียว - แดงในพื้นที่ HSV แปลเป็น RGB:

blue = 0.0
if 0<=power<0.5:        #first, green stays at 100%, red raises to 100%
    green = 1.0
    red = 2 * power
if 0.5<=power<=1:       #then red stays at 100%, green decays
    red = 1.0
    green = 1.0 - 2 * (power-0.5)

ค่าสีแดง, เขียว, น้ำเงินในตัวอย่างด้านบนคือเปอร์เซ็นต์คุณอาจต้องการคูณมันด้วย 255 เพื่อให้ได้ช่วงที่ใช้มากที่สุด 0-255


12

คำตอบ Copy'n'Paste สั้น ๆ ...

บน Java Std:

int getTrafficlightColor(double value){
    return java.awt.Color.HSBtoRGB((float)value/3f, 1f, 1f);
}

บน Android:

int getTrafficlightColor(double value){
    return android.graphics.Color.HSVToColor(new float[]{(float)value*120f,1f,1f});
}

หมายเหตุ: ค่าคือตัวเลขระหว่าง 0 ถึง 1 ที่ระบุถึงเงื่อนไขสีแดงถึงสีเขียว


การแปลงโดยตรงกับรหัสฐานสิบหกสีที่คุณอาจต้องการที่จะยกระดับString.format("#%06X", 0xFFFFFF & getTrafficlightColor(value));
ngeek

10

หากคุณต้องการการเป็นตัวแทนสีเขียวสีเหลืองสีแดงเช่นคำตอบที่ยอมรับได้แล้วให้ดูที่นี้

http://jsfiddle.net/0awncw5u/2/

function percentToRGB(percent) {
    if (percent === 100) {
        percent = 99
    }
    var r, g, b;

    if (percent < 50) {
        // green to yellow
        r = Math.floor(255 * (percent / 50));
        g = 255;

    } else {
        // yellow to red
        r = 255;
        g = Math.floor(255 * ((50 - percent % 50) / 50));
    }
    b = 0;

    return "rgb(" + r + "," + g + "," + b + ")";
}


function render(i) {
    var item = "<li style='background-color:" + percentToRGB(i) + "'>" + i + "</li>";
    $("ul").append(item);
}

function repeat(fn, times) {
    for (var i = 0; i < times; i++) fn(i);
}


repeat(render, 100);
li {
    font-size:8px;
    height:10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<ul></ul>


ฉันได้รับค่าเท่ากันสำหรับเปอร์เซ็นต์ที่แตกต่างกันโดยใช้รหัสนี้ ... แนวคิดใดบ้าง ตัวอย่างเช่นเปอร์เซ็นต์ต่อไปนี้จะคืนค่า RGB 1,255,0: 0.277, 0.222, 0.111 ... ค่าที่สูงกว่า (ตัวอย่างเช่น 1.0) จะคืนค่า RGB ที่ถูกต้องด้วยสีเขียวที่สว่างกว่า แต่จะหยุดการติดตามหลังธรณีประตู เฉดสีเขียวในระดับของฉัน
Patrick

8

การแก้ไขเชิงเส้นตรงระหว่างสีเขียวและสีแดงเกือบจะทำงานได้ยกเว้นว่าตรงกลางจะมีสีน้ำตาลขุ่น

วิธีการแก้ปัญหาที่ยืดหยุ่นและดูดีที่สุดคือการมีไฟล์รูปภาพอยู่ที่ไหนสักแห่งที่มีทางลาดสีที่คุณต้องการ จากนั้นค้นหาค่าพิกเซลในนั้น นี้มีความยืดหยุ่นที่คุณสามารถปรับแต่งการไล่ระดับสีที่จะเป็นเพียงขวา

หากคุณยังคงต้องการที่จะทำจากรหัสก็คงเป็นการดีที่สุดที่จะสอดแทรกระหว่างสีเขียวและสีเหลืองทางด้านซ้ายและระหว่างสีเหลืองและสีแดงทางด้านขวา ในพื้นที่ RGB สีเขียวคือ (R = 0, G = 255, B = 0) สีเหลืองคือ (R = 255, G = 255, B = 0) สีแดงคือ (R = 255, G = 0, B = 0 ) - นี่คือการสมมติว่าแต่ละองค์ประกอบสีเริ่มจาก 0 ถึง 255


1
คำแนะนำที่นี่ในการแยกสเปคตรัมเป็นสีแดง / สีเหลืองและสีเหลือง / สีเขียวให้ผลลัพธ์สีเหลืองที่น่าพอใจที่สุด
รูปที่

4

ฉันทำฟังก์ชันขนาดเล็กซึ่งให้ค่า rgb จำนวนเต็มสำหรับค่าเปอร์เซ็นต์:

private int getGreenToRedGradientByValue(int currentValue, int maxValue)
{
    int r = ( (255 * currentValue) / maxValue );
    int g = ( 255 * (maxValue-currentValue) ) / maxValue;
    int b = 0;
    return ((r&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff);
}

ดังนั้นหากค่าปัจจุบันของคุณคือ 50 และ maxValue ของคุณคือ 100 ฟังก์ชันนี้จะส่งคืนสีที่คุณต้องการดังนั้นหากคุณวนลูปฟังก์ชันนี้ด้วยค่าเปอร์เซ็นต์ค่าสีของคุณจะเปลี่ยนจากสีเขียวเป็นสีแดง ขออภัยสำหรับคำอธิบายที่ไม่ดี


3

คำตอบที่ยอมรับไม่ได้ตอบคำถามจริงๆ ...

C ++

นี่คือส่วนรหัส C ++ ที่เรียบง่ายจากเครื่องยนต์ของฉันที่แทรกเชิงเส้นและมีประสิทธิภาพระหว่างสามสีโดยพลการ:

const MATH::FLOAT4 color1(0.0f, 1.0f, 0.0f, 1.0f);  // Green
const MATH::FLOAT4 color2(1.0f, 1.0f, 0.0f, 1.0f);  // Yellow
const MATH::FLOAT4 color3(1.0f, 0.0f, 0.0f, 1.0f);  // Red

MATH::FLOAT4 get_interpolated_color(float interpolation_factor)
{
    const float factor_color1 = std::max(interpolation_factor - 0.5f, 0.0f);
    const float factor_color2 = 0.5f - fabs(0.5f - interpolation_factor);
    const float factor_color3 = std::max(0.5f - interpolation_factor, 0.0f);

    MATH::FLOAT4 color;

    color.x = (color1.x * factor_color1 +
               color2.x * factor_color2 +
               color3.x * factor_color3) * 2.0f;

    color.y = (color1.y * factor_color1 +
               color2.y * factor_color2 +
               color3.y * factor_color3) * 2.0f;

    color.z = (color1.z * factor_color1 +
               color2.z * factor_color2 +
               color3.z * factor_color3) * 2.0f;

    color.w = 1.0f;

    return(color);
}

จะถือว่าอยู่ในช่วงของinterpolation_factor สีจะถือว่าอยู่ในช่วง(เช่นสำหรับ OpenGL) 0.0 ... 1.0
0.0 ... 1.0

ค#

นี่คือฟังก์ชั่นเดียวกับที่เขียนใน C #:

private readonly Color mColor1 = Color.FromArgb(255, 0, 255, 0);
private readonly Color mColor2 = Color.FromArgb(255, 255, 255, 0);
private readonly Color mColor3 = Color.FromArgb(255, 255, 0, 0);

private Color GetInterpolatedColor(double interpolationFactor)
{
    double interpolationFactor1 = Math.Max(interpolationFactor - 0.5, 0.0);
    double interpolationFactor2 = 0.5 - Math.Abs(0.5 - interpolationFactor);
    double interpolationFactor3 = Math.Max(0.5 - interpolationFactor, 0.0);

    return (Color.FromArgb(255,
                (byte)((mColor1.R * interpolationFactor1 +
                        mColor2.R * interpolationFactor2 +
                        mColor3.R * interpolationFactor3) * 2.0),

                (byte)((mColor1.G * interpolationFactor1 +
                        mColor2.G * interpolationFactor2 +
                        mColor3.G * interpolationFactor3) * 2.0),

                (byte)((mColor1.B * interpolationFactor1 +
                        mColor2.B * interpolationFactor2 +
                        mColor3.B * interpolationFactor3) * 2.0)));
}

จะถือว่าอยู่ในช่วงของinterpolationFactor สีจะถือว่าเป็นในช่วงของ 0.0 ... 1.0
0 ... 255


1
รหัส C # ใช้งานได้ยอดเยี่ยมสำหรับฉัน (เพิ่ม upvote) แต่มีข้อผิดพลาดการสะกดคำในการแก้ไข
InteractationFactorColor2

นอกจากนี้เพื่อความสมบูรณ์นี่คือวิธีที่ฉันใช้ฟังก์ชั่นเพื่อกลับ RGB ไปเป็นมุมมอง MVC razr double n = realValue / maxValue; // นี่ให้อัตราส่วน 0-1 var color = GetInterpolatedColor (n); return string.Concat ("#", colour.R.ToString ("X"), colour.G.ToString ("X"), colour.B.ToString ("X"));
DJIDave

@DJIDave: ว้าวสิ่งที่ผิดพลาดที่เห็นได้ชัดและโง่ ฉันแก้ไขมันแล้ว ขอบคุณ!
ธารา

2

คุณจำเป็นต้องสอดแทรกองค์ประกอบเชิงเส้น (LERP) เชิงเส้น ต่อไปนี้เป็นวิธีที่ทำได้โดยทั่วไปโดยกำหนดค่าเริ่มต้นv0ค่าสิ้นสุดv1และอัตราส่วนที่ต้องการ(ค่าทศนิยมปกติระหว่าง 0.0 ถึง 1.0):

v = v0 + ratio * (v1 - v0)

สิ่งนี้จะให้ v0 เมื่ออัตราส่วนคือ 0.0, v1 เมื่ออัตราส่วนคือ 1.0 และทุกอย่างระหว่างในกรณีอื่น ๆ

คุณสามารถทำได้ทั้งบนส่วนประกอบ RGB หรือใช้ชุดสีอื่น ๆ เช่น HSV หรือ HLS สองอันหลังจะเป็นที่ชื่นชอบทางสายตามากขึ้นเนื่องจากพวกมันทำงานบนองค์ประกอบของเฉดสีและความสว่างซึ่งทำแผนที่ได้ดีกว่าการรับรู้สีของเรา


2

ฉันอยากบอกว่าคุณต้องการบางสิ่งบางอย่างระหว่างส่วนของเส้นตรงในพื้นที่ HSV (ซึ่งมีสีเหลืองสว่างเกินไปเล็กน้อยตรงกลาง) และส่วนของเส้นตรงในพื้นที่ RGB (ซึ่งมีสีน้ำตาลน่าเกลียดอยู่ตรงกลาง) ฉันจะใช้สิ่งนี้ที่power = 0จะให้สีเขียวpower = 50จะให้สีเหลืองน่าเบื่อเล็กน้อยและpower = 100จะให้สีแดง

blue = 0;
green = 255 * sqrt( cos ( power * PI / 200 ));
red = 255 * sqrt( sin ( power * PI / 200 )); 

2

นี่คือโซลูชันการคัดลอกและวางสำหรับเครื่องชั่ง Swift และ HSV:

เครื่องมือเริ่มต้น UIColor ยอมรับสีความอิ่มตัวและความสว่างใน [0, 1] ดังนั้นสำหรับค่าที่กำหนดจาก [0, 1] เรามี:

let hue:        CGFloat = value / 3
let saturation: CGFloat = 1 // Or choose any
let brightness: CGFloat = 1 // Or choose any
let alpha:      CGFloat = 1 // Or choose any

let color = UIColor(hue: hue, saturation: saturation, brightness: brightness, alpha: alpha)

1
import java.awt.Color;

public class ColorUtils {

    public static Color interpolate(Color start, Color end, float p) {
        float[] startHSB = Color.RGBtoHSB(start.getRed(), start.getGreen(), start.getBlue(), null);
        float[] endHSB = Color.RGBtoHSB(end.getRed(), end.getGreen(), end.getBlue(), null);

        float brightness = (startHSB[2] + endHSB[2]) / 2;
        float saturation = (startHSB[1] + endHSB[1]) / 2;

        float hueMax = 0;
        float hueMin = 0;
        if (startHSB[0] > endHSB[0]) {
            hueMax = startHSB[0];
            hueMin = endHSB[0];
        } else {
            hueMin = startHSB[0];
            hueMax = endHSB[0];
        }

        float hue = ((hueMax - hueMin) * p) + hueMin;

        return Color.getHSBColor(hue, saturation, brightness);
    }
}

1

หากคุณต้องการการไล่ระดับสีชนิดนี้ (กลับด้านจริง) ใน CSS (ขั้นต่ำรุ่น 2.1) คุณสามารถใช้ HSL ได้เช่นกัน

สมมติว่าคุณอยู่ในเทมเพลต AngularJs และค่าเป็นตัวเลขตั้งแต่ 0 ถึง 1 และคุณต้องการจัดองค์ประกอบ (พื้นหลังหรือสีข้อความ) ...

hsl({{ value * 120}}, 50%, 35%)

ค่าแรก: องศา (0 แดง 120 สีเขียว) ค่าที่สอง: ความอิ่มตัว (เป็นกลาง 50%) ค่าที่สาม: ความสว่าง (เป็นกลาง 50%)

บทความที่ดีที่นี่

ทฤษฎีเกี่ยวกับวิกิพีเดียที่นี่


1

นี่คือObjective-Cเวอร์ชั่นของ Simucal's solution:

- (UIColor*) colorForCurrentLevel:(float)level
{
    double hue = level * 0.4; // Hue (note 0.4 = Green)
    double saturation = 0.9; // Saturation
    double brightness = 0.9; // Brightness

    return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1.0];
}

ไหนจะเป็นระดับค่าระหว่างและ0.0 หวังว่านี่จะช่วยใครซักคน!1.0


1

ใน Python 2.7:

import colorsys

def get_rgb_from_hue_spectrum(percent, start_hue, end_hue):
    # spectrum is red (0.0), orange, yellow, green, blue, indigo, violet (0.9)
    hue = percent * (end_hue - start_hue) + start_hue
    lightness = 0.5
    saturation = 1
    r, g, b = colorsys.hls_to_rgb(hue, lightness, saturation)
    return r * 255, g * 255, b * 255

# from green to red:
get_rgb_from_hue_spectrum(percent, 0.3, 0.0)

# or red to green:
get_rgb_from_hue_spectrum(percent, 0.0, 0.3)

value / max_valueร้อยละของหลักสูตร หรือถ้าขนาดของคุณไม่ได้เริ่มต้นที่ 0 (value - min_value) / (max_value - min_value)แล้ว


1

JavaScript

ฉันใช้ Google Visualization กับแผนภูมิแท่งและต้องการให้แถบเป็นสีเขียวถึงสีแดงตามเปอร์เซ็นต์ นี่กลายเป็นทางออกที่สะอาดที่สุดที่ฉันพบและทำงานได้อย่างสมบูรณ์

function getGreenToRed(percent){
    r = percent<50 ? 255 : Math.floor(255-(percent*2-100)*255/100);
    g = percent>50 ? 255 : Math.floor((percent*2)*255/100);
    return 'rgb('+r+','+g+',0)';
}

ตรวจสอบให้แน่ใจว่าเปอร์เซ็นต์ของคุณคือ 50 สำหรับ 50% และไม่ใช่ 0.50


1

ฉันได้อัปเดตคำตอบที่ยอมรับแล้วโดยแบ่งออกเป็นครึ่งแรกและครึ่งหลังของช่วง (0,100) และแทนที่ 100 ด้วยระดับสูงสุดเพื่อให้ช่วงสามารถเป็นแบบไดนามิก ผลลัพธ์นั้นเหมือนกับรุ่น HSV แต่ก็ยังใช้ RGB อยู่ กุญแจสำคัญคือต้องมี (255,255,0) ที่อยู่ตรงกลางเพื่อเป็นตัวแทนของสีเหลือง ฉันได้รวมแนวคิดนี้ในคำตอบที่ยอมรับและรหัส VBA อื่นดังนั้นบรรลุใน VBA และใช้ใน Excel ฉันหวังว่าตรรกะจะช่วยและสามารถใช้ในภาษา / แอปพลิเคชันอื่น ๆ

Sub UpdateConditionalFormatting(rng As Range)
    Dim cell As Range
    Dim max As Integer

    max = WorksheetFunction.max(rng)

    For Each cell In rng.Cells

    If cell.Value >= 0 And cell.Value < max / 2 Then
        cell.Interior.Color = RGB(255 * cell.Value / (max / 2), 255, 0)
    ElseIf cell.Value >= max / 2 And cell.Value <= max Then
        cell.Interior.Color = RGB(255, 255 * ((max) - cell.Value) / (max / 2), 0)
    End If

    Next cell
End Sub

ไชโย, Pavlin


1

VB

Public Function GetPercentageColor( _
  ByVal iPercent As Long, Optional _
  ByVal bOpposit As Boolean) As Long
' 0->100% - Green->Yellow->Red
' bOpposit - Red->Yellow->Green

If bOpposit Then iPercent = (100 - iPercent)

Select Case iPercent
Case Is < 1: GetPercentageColor = 65280 ' RGB(0, 255, 0)
Case Is > 99: GetPercentageColor = 255  ' RGB(255, 0, 0)
Case Is < 50: GetPercentageColor = RGB(255 * iPercent / 50, 255, 0)
Case Else: GetPercentageColor = RGB(255, (255 * (100 - iPercent)) / 50, 0)
End Select

End Function

ขณะนี้อาจใช้งานได้จะเป็นประโยชน์ถ้าคุณจะให้คำอธิบายบางอย่าง
David Glickman

0

ตัวอย่างที่มีอยู่ในตัวเอง

<html>
<head>
<script>
//--------------------------------------------------------------------------
function gradient(left, mid, right)
{
    var obj = {}

    var lt50 = {"r":(mid.r-left.r)/50.0,
                "g":(mid.g-left.g)/50.0,
                "b":(mid.b-left.b)/50.0}
    var gt50 = {"r":(right.r-mid.r)/50.0,
                "g":(right.g-mid.g)/50.0,
                "b":(right.b-mid.b)/50.0}

    obj.getColor = function(percent) {
        if (percent == 50.0) {
            return mid;
        }
        if (percent < 50.0) {
            return "rgb("+Math.floor(left.r+lt50.r*percent+0.5)+","+
                          Math.floor(left.g+lt50.g*percent+0.5)+","+
                          Math.floor(left.b+lt50.b*percent+0.5)+")";
        }
        var p2 = percent-50.0;
        return "rgb("+Math.floor(mid.r+gt50.r*p2+0.5)+","+
                      Math.floor(mid.g+gt50.g*p2+0.5)+","+
                      Math.floor(mid.b+gt50.b*p2+0.5)+")";
    }

    return obj;
}

//--------------------------------------------------------------------------
var g_gradient = gradient( {"r":255, "g":20, "b":20},  // Left is red
                           {"r":255, "g":255, "b":20}, // Middle is yellow
                           {"r":20, "g":255, "b":20} ); // right is green

//--------------------------------------------------------------------------
function updateColor()
{
    var percent = document.getElementById('idtext').value.length;
    var oscore = document.getElementById('idscore');

    if (percent > 100.0) {
        percent = 100.0;
    }
    if (percent < 0.0) {
        percent = 0.0;
    }
    var col = g_gradient.getColor(percent)
    oscore.style['background-color'] = col;
    oscore.innerHTML = percent + '%';
}

</script>
</head>
<body onLoad="updateColor()">
<input size='100' placeholder='type text here' id='idtext' type="text" oninput="updateColor()" />
<br />
<br />
<div id='idscore' style='text-align:center; width:200px; border-style:solid;
     border-color:black; border-width:1px; height:20px;'> </div>
</body>
</html>

0

สิ่งนี้จะแตกต่างจากสีแดงเป็นสีเหลืองและจากนั้นเป็นสีเขียว
ค่าจะแตกต่างกันตั้งแต่ 0 - 100

-(UIColor*) redToGreenColorWithPosition:(int) value {

    double R, G;
    if (value > 50) {
        R = (255 * (100 - value)/ 50) ;
        G = 255;
    }else {
        R = 255;
        G = (255 * (value*2)) / 100;
    }

    return [UIColor colorWithRed:R/255.0f green:G/255.0f blue:0.0f alpha:1.0f];
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.