পাওয়ার মিটারের জন্য লাল এবং সবুজ রঙের মধ্যে রঙ তৈরি করতে চান?


137

আমি একটি জাভা গেম লিখছি এবং আপনি কতটা শক্তভাবে অঙ্কুর করতে চলেছেন তার জন্য আমি একটি পাওয়ার মিটার প্রয়োগ করতে চাই।

আমাকে একটি ফাংশন লিখতে হবে যা 0 - 100 এর মধ্যে একটি অন্তর্নিহিত লাগে এবং যে সংখ্যাটি কতটা বেশি তার উপর ভিত্তি করে এটি সবুজ (পাওয়ার স্কেলে 0) এবং লাল (পাওয়ার স্কেলের 100) এর মধ্যে একটি রঙ ফেরত দেবে।

ভলিউম নিয়ন্ত্রণ কীভাবে কাজ করে তার সমান:
ভলিউম নিয়ন্ত্রণ

সবুজ এবং লাল মধ্যে রঙ উৎপন্ন করতে কোন রঙের লাল, সবুজ এবং নীল উপাদানগুলিতে আমার কী অপারেশন করা উচিত?

সুতরাং, আমি বলতে চালাতে পারি, getColor(80)এবং এটি একটি কমলা রঙের (আর, জি, বি এর মানগুলি) getColor(10)ফিরে আসবে বা এটি আরও সবুজ / হলুদ আরজিবি মান প্রদান করবে।

আমি জানি যে নতুন রঙের জন্য আমার আর, জি, বি মানগুলির উপাদানগুলি বাড়ানো দরকার, তবে সবুজ-লাল থেকে রঙ পরিবর্তন হওয়ার সাথে সাথে কী উপরে বা নীচে যায় তা আমি বিশেষভাবে জানি না।


অগ্রগতি:

আমি এইচএসভি / এইচএসবি রঙের স্থানটি ব্যবহার করে শেষ করেছি কারণ আমি গ্রেডিয়েন্টটি আরও ভাল পছন্দ করেছি (মাঝখানে কোনও গা brown় বাদামী নয়)।

আমি ব্যবহৃত ফাংশনটি ছিল:

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

যেখানে "শক্তি" 0.0 এবং 1.0 এর মধ্যে একটি সংখ্যা। ০.০ একটি উজ্জ্বল লাল ফিরবে, ০.০ একটি উজ্জ্বল সবুজ ফিরবে।

জাভা হু চার্ট:
জাভা হিউ চার্ট


আমি আগে এখানে একই (অত্যন্ত অনুরূপ) প্রশ্নটি জিজ্ঞাসা করেছি: http://stackoverflow.com/questions/168838/color-scaling-function
টমাস পাজোনক

2
আপনি কি ক্ষমতা উল্টাবেন না? ধরে নিলে লালটি সবচেয়ে বেশি হিট, এবং আপনি 0.1 এবং 0.4 এর মধ্যে কাজ করছেন, উচ্চতর
পাওয়ারটি

আপনি কি ওপেনজিএল ব্যবহার করছেন? যেহেতু একটি ত্রিভুজের বিন্দু বিভিন্ন রঙে সেট করার উপায় রয়েছে এবং তারপরে তাদের মধ্যে মিশ্রণ / গ্রেডিয়েন্ট। গ্রাফিক্স কার্ডটিকে আপনার কাজটি করতে বলার জন্য আপনি সম্ভবত আরও ভাল পারফরম্যান্স পাবেন। এছাড়াও কোডটি আরও সহজ / আরও অভিযোজ্য হতে পারে (যদি আপনি কোনও এলিয়েনের বিদ্যুৎ মিটার সবুজ থেকে নীল যেতে চান তবে বলুন)
দারসি থমাস

উত্তর:


203

এটি কাজ করা উচিত - লাল এবং সবুজ মানগুলিকে কেবল রৈখিকভাবে স্কেল করুন। আপনার সর্বাধিক লাল / সবুজ / নীল মানটি ধরে নেওয়া 255এবং nএটি সীমার মধ্যে রয়েছে0 .. 100

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

(পূর্ণসংখ্যার গণিতের জন্য সংশোধিত, ফেরুশিওর কাছে টুপিটির টিপ)

করার আরেকটি উপায় হ'ল এইচএসভি রঙের মডেল ব্যবহার করা এবং যে রঙিন 0 degrees(লাল) থেকে 120 degrees(সবুজ) তার জন্য যে পরিমাণে স্যাচুরেশন এবং মানটি আপনার উপযোগী তা সঞ্চার করুন। এটি আরও আনন্দদায়ক গ্রেডিয়েন্ট দেয় should

এখানে প্রতিটি প্রযুক্তির একটি প্রদর্শন - শীর্ষ গ্রেডিয়েন্ট আরজিবি ব্যবহার করে, নীচে এইচএসভি ব্যবহার করে:

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


20
এইচএসভি স্পেসে এটি করা অনেক বেশি
ডিজেক্লেওয়ার্থ

@ ডিজেক্লেওয়ার্থ, হ্যাঁ আমি এইচএসভি দিয়েছিলাম।
mmcdole

+1 টি; এইচটিএমএল / পিএইচপি-তে একটি বার্ট চার্ট রঙ করার জন্য আমি কীভাবে রঙিন অ্যালগরিদমকে উন্নত করব সে সম্পর্কে আমি একটি নতুন প্রশ্ন জিজ্ঞাসা করতে যাচ্ছিলাম ... সুতরাং এই প্রশ্নের অনুরূপ অনুরোধ জানানো হয়েছে এবং আপনার উত্তর আমাকে প্রশ্ন জিজ্ঞাসা না করেই সমস্যার সমাধান করতে সহায়তা করেছে! ধন্যবাদ!
30:49

যে কোনও রঙের মানের সাথে কাজ করে এমন কোনও ফাংশন আপনি কীভাবে লিখবেন? বলুন, আরজিবি 20,30,190 এবং আরবিজি 69,190,10 এর মধ্যে রঙটি গণনা করুন?
কোকোডোকো

1
একই কৌশল - এন ধাপে X এর মান থেকে অন্য পদক্ষেপে প্রতিটি ধাপে আপনি X (YX) / N দ্বারা বৃদ্ধি পাবেন - যদিও আপনি আরজিবি
পল ডিকসন

32

আমার মাথার শীর্ষে, এইচএসভি স্থানটিতে সবুজ-লাল রঙের রূপান্তরটি আরজিবিতে অনুবাদ হয়েছে:

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)

উপরের উদাহরণে লাল, সবুজ, নীল মানগুলি শতাংশ শতাংশ, আপনি সম্ভবত সবচেয়ে বেশি ব্যবহৃত 0-255 ব্যাপ্তি পেতে 255 দিয়ে গুণ করতে চান।


12

সংক্ষিপ্ত অনুলিপি উত্তর ...

জাভা স্ট্যান্ডে:

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

অ্যান্ড্রয়েডে:

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

দ্রষ্টব্য: মান হল 0 থেকে 1 এর মধ্যে একটি নম্বর যা লাল থেকে সবুজ শর্তকে নির্দেশ করে।


সরাসরি একটি হেক্স রঙের কোডে রূপান্তর করতে, আপনি String.format("#%06X", 0xFFFFFF & getTrafficlightColor(value));
উত্তোলন

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>


আমি এই কোডটি ব্যবহার করে বিভিন্ন শতাংশের জন্য সমান মান পাচ্ছি ... কোনও ধারণা? উদাহরণস্বরূপ, নিম্নলিখিত শতাংশগুলি সমস্ত আরজিবি 1,255,0: 0.277, 0.222, 0.111 প্রদান করে ... উচ্চতর মানগুলি (উদাহরণস্বরূপ 1.0) উজ্জ্বল সবুজ দিয়ে সঠিক আরজিবিগুলি ফেরত দেয় তবে তারা একটি প্রান্তিকের পরে বন্ধ হওয়া বন্ধ করে দেয় এবং আমি কেবল পাই আমার স্কেল সবুজ ছায়া গো।
প্যাট্রিক 17

8

মাঝখানে কাদা বাদামি বর্ণের বাদে সবুজ এবং লাল রঙের মধ্যে প্রায়শই রৈখিকভাবে ইন্টারপোলটিংয়ের কাজ করা উচিত।

সর্বাধিক নমনীয় এবং সর্বাধিক সন্ধানের সমাধানটি হ'ল এমন কোনও চিত্র ফাইল রাখা যাতে আপনার পছন্দ মতো রঙিন র‌্যাম্প থাকে। এবং তারপরে সেখানে পিক্সেল মানটি দেখুন। এটিতে নমনীয়তা রয়েছে যা আপনি গ্রেডিয়েন্টটিকে ঠিক ডান হতে পারেন ।

আপনি যদি এখনও কোড থেকে এটি করতে চান, তবে সম্ভবত বাম দিকে সবুজ এবং হলুদ রঙের মধ্যে এবং ডানদিকে হলুদ এবং লাল এর মধ্যে গলা ফেলা ভাল। আরজিবি স্পেসে সবুজ (আর = 0, জি = 255, বি = 0), হলুদ হয় (আর = 255, জি = 255, বি = 0), লাল হয় (আর = 255, জি = 0, বি = 0) ) - এটি ধরে নিচ্ছে যে প্রতিটি রঙের উপাদান 0 থেকে 255 পর্যন্ত চলেছে।


1
বর্ণালীটিকে লাল / হলুদ এবং হলুদ / সবুজ রঙে বিভক্ত করার পরামর্শটি সবচেয়ে আনন্দদায়ক হলুদ ফলাফল দেয়।
ডুমুর

4

আমি একটি ছোট ফাংশন তৈরি করেছি যা আপনাকে শতাংশের জন্য আরজিবি পূর্ণসংখ্যার মান দেয়:

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 হয় এবং আপনার সর্বোচ্চটি 100 হয় তবে এই ফাংশনটি আপনার প্রয়োজনীয় রঙটি ফিরিয়ে দেবে, সুতরাং আপনি যদি এই ফাংশনটিকে শতাংশের মান দিয়ে লুপ করেন তবে আপনার রঙের মান সবুজ থেকে লাল হয়ে যাবে। খারাপ ব্যাখ্যার জন্য দুঃখিত


3

গৃহীত উত্তর এমনকি সত্যই প্রশ্নের উত্তর দেয়নি ...

সি ++

আমার ইঞ্জিন থেকে এখানে একটি সরল সি ++ কোড সেগমেন্ট যা লাইনারি এবং দক্ষতার সাথে তিনটি নির্বিচারে রঙের মধ্যে বিভক্ত হয়:

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সীমার মধ্যে গণ্য করা হয় 0.0 ... 1.0
রঙগুলি 0.0 ... 1.0(যেমন ওপেনগিএলের জন্য) এর মধ্যে রয়েছে বলে ধরে নেওয়া হয় ।

সি শার্প

এখানে সি # তে লিখিত একই ফাংশন:

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
সি # কোডটি আমার জন্য উজ্জ্বল কাজ করেছে (উপরি যোগ করা হয়েছে) তবে এতে একটি বানান ভুল রয়েছে এতে
অন্তরঙ্গকরণ ফ্যাক্টর কালার

এছাড়াও সম্পূর্ণতার জন্য এইভাবে আমি ফাংশনটি আরবিজি কে এমভিসি রেজার ভিউতে ডাবল এন = আসলভ্যালু / ম্যাক্সভ্যালুতে ফেরত দেওয়ার জন্য ব্যবহার করেছি; // এটি 0-1 বর্ণের বর্ণ = getInterpolatedColor (n) দেয়; স্ট্রিং.কনক্যাট ("#", কলর.আর.টোস্ট্রিং ("এক্স"), কলর.জি.টাস্ট্রিং ("এক্স"), কলর.বি.টসস্ট্রিং ("এক্স"));
ডিজেডেভ

@ ডিজেডেভ: বাহ, কী একটি সুস্পষ্ট এবং মূ .় ভুল। আমি এটা ঠিক করেছি। ধন্যবাদ!
তারা

2

আপনাকে রঙের উপাদানগুলিকে রৈখিকভাবে ইন্টারপোলেট (এলইআরপি) করতে হবে। এটি এখানে কীভাবে সাধারণভাবে করা হয়, এখানে একটি শুরুর মান v0 , একটি শেষ মান v1 এবং প্রয়োজনীয় অনুপাত (0.0 এবং 1.0 এর মধ্যে একটি স্বাভাবিক ভাসমান) দেওয়া হয়:

v = v0 + ratio * (v1 - v0)

এটি অনুপাত ০.০, যখন অনুপাত ০.০ হয় তখন ভি0 দেয় এবং অন্যান্য ক্ষেত্রে সমস্ত কিছু।

আপনি এটি আরজিবি উপাদানগুলিতে বা এইচএসভি বা এইচএলএসের মতো কিছু অন্যান্য রঙের স্কিম ব্যবহার করে করতে পারেন। দ্বিতীয়টি আরও দৃষ্টি আকর্ষণীয় হবে, যেহেতু তারা রঙ এবং উজ্জ্বলতা সংমিশ্রণগুলিতে কাজ করে যা আমাদের রঙ উপলব্ধি আরও উন্নত করে।


2

আমি বলব যে আপনি এইচএসভি স্থানের একটি লাইন বিভাগের (যা মাঝখানে কিছুটা খুব উজ্জ্বল হলুদ রয়েছে) এবং আরজিবি স্পেসের একটি রেখার অংশের (যা কেন্দ্রে একটি কুৎসিত বাদামী আছে) কিছু চাই। আমি এটি ব্যবহার power = 0করব , যেখানে সবুজ দেবে, power = 50কিছুটা নিস্তেজ হলুদ power = 100দেবে এবং লাল দেবে।

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

2

এখানে সুইফ্ট এবং এইচএসভি স্কেলের জন্য অনুলিপি-পেস্ট সমাধান রয়েছে:

ইউআইকোলার ইনিশিয়ালাইজার [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

আপনার যদি এই ধরণের গ্রেডিয়েন্টের (আসলে বিপরীত) দরকার হয় তবে সিএসএসে (ন্যূনতম সংস্করণ ২.১) আপনি এইচএসএলও ব্যবহার করতে পারেন।

মনে করুন আপনি একটি কৌণিক জে টেমপ্লেটে রয়েছেন এবং মানটি 0 থেকে 1 অবধি এবং আপনি কোনও উপাদান (পটভূমি বা পাঠ্যের রঙ) স্টাইল করতে চান ...

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

প্রথম মান: ডিগ্রি (0 লাল, 120 সবুজ) দ্বিতীয় মান: স্যাচুরেশন (50% নিরপেক্ষ) তৃতীয় মান: স্বচ্ছতা (50% নিরপেক্ষ)

এখানে একটি নিবন্ধ

এখানে উইকিপিডিয়ায় তত্ত্ব


1

Objective-Cসিমুকালের সমাধানের সংস্করণটি এখানে :

- (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

পাইথন ২.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

জাভাস্ক্রিপ্ট

আমি বার চার্টের সাথে গুগল ভিজ্যুয়ালাইজেশন ব্যবহার করছি এবং শতাংশের উপর ভিত্তি করে বারগুলি সবুজ থেকে লাল হতে চাই। এটি আমি খুঁজে পেয়েছি এবং পুরোপুরি কার্যকরভাবে পরিস্কার সমাধান হিসাবে প্রমাণিত।

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 প্রতিস্থাপন করে আপডেট করেছি, যাতে পরিসীমাটি গতিশীল হয়ে উঠতে পারে। ফলাফলটি ঠিক এইচএসভি মডেলের মতোই, তবে এখনও আরজিবি ব্যবহার করছে। হলুদ বর্ণটি উপস্থাপন করার জন্য কীটির মাঝখানে (255,255,0) হওয়া উচিত। আমি এই ধারণাটি গ্রহণযোগ্য উত্তর এবং অন্য একটি ভিবিএ কোডে একত্রিত করেছি, সুতরাং এটি ভিবিএতে অর্জন করুন এবং এক্সেলটিতে ব্যবহার করুন। আমি আশা করি যুক্তি সাহায্য করে এবং অন্যান্য ভাষা / অ্যাপ্লিকেশনগুলিতে ব্যবহার করা যেতে পারে।

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

চিয়ার্স, পাভলিন


1

ভিবি

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

যদিও এটি কাজ করতে পারে, আপনি যদি কিছু ব্যাখ্যা সরবরাহ করেন তবে এটি সহায়ক হবে
ডেভিড গ্লিকম্যান

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.