रेखांकन में अलग आरजीबी रंग उत्पन्न करें


84

जब ग्राफ़ बनाते हैं और डेटा के विभिन्न सेट दिखाते हैं तो आमतौर पर सेट को रंग से अलग करना एक अच्छा विचार होता है। तो एक रेखा लाल है और दूसरी हरी और इसी तरह है। समस्या यह है कि जब डेटासेट की संख्या अज्ञात है तो इन रंगों को बेतरतीब ढंग से उत्पन्न करने की आवश्यकता होती है और अक्सर वे एक दूसरे के बहुत करीब होते हैं (उदाहरण के लिए हरे, हल्के हरे)।

यह कैसे हल किया जा सकता है और यह कैसे अलग अलग रंग उत्पन्न करने के लिए कब्जे में होगा पर कोई विचार?

अगर कोई उदाहरण (अगर आपको लगता है कि आसान लगता है तो उदाहरण के बिना समस्या और समाधान पर चर्चा करने के लिए स्वतंत्र हैं) सी # और आरजीबी आधारित रंगों में थे तो मुझे बहुत अच्छा लगेगा।


जवाबों:


132

आपके पास तीन रंग चैनल 0 से 255 आर, जी और बी हैं।

पहले उधर से गुजरो

0, 0, 255
0, 255, 0
255, 0, 0

फिर गुजर जाओ

0, 255, 255
255, 0, 255
255, 255, 0

फिर 2 => 128 से विभाजित करें और फिर से शुरू करें:

0, 0, 128
0, 128, 0
128, 0, 0
0, 128, 128
128, 0, 128
128, 128, 0

2 => 64 से भाग दें

अगली बार 64 से 128 => 192 जोड़ें

पैटर्न का पालन करें।

प्रोग्राम के लिए सीधा और आपको काफी अलग रंग देता है।

संपादित करें: कोड नमूने के लिए अनुरोध

इसके अलावा - अगर ग्रे एक स्वीकार्य रंग है तो नीचे अतिरिक्त पैटर्न में जोड़ना:

255, 255, 255
128, 128, 128 

ऐसे कई तरीके हैं जिनसे आप इनको कोड में जनरेट कर सकते हैं।

आसान तरीका

यदि आप यह गारंटी दे सकते हैं कि आपको निश्चित संख्या से अधिक रंगों की आवश्यकता नहीं होगी, तो बस इस पैटर्न के बाद रंगों की एक सरणी उत्पन्न करें और उन का उपयोग करें:

    static string[] ColourValues = new string[] { 
        "FF0000", "00FF00", "0000FF", "FFFF00", "FF00FF", "00FFFF", "000000", 
        "800000", "008000", "000080", "808000", "800080", "008080", "808080", 
        "C00000", "00C000", "0000C0", "C0C000", "C000C0", "00C0C0", "C0C0C0", 
        "400000", "004000", "000040", "404000", "400040", "004040", "404040", 
        "200000", "002000", "000020", "202000", "200020", "002020", "202020", 
        "600000", "006000", "000060", "606000", "600060", "006060", "606060", 
        "A00000", "00A000", "0000A0", "A0A000", "A000A0", "00A0A0", "A0A0A0", 
        "E00000", "00E000", "0000E0", "E0E000", "E000E0", "00E0E0", "E0E0E0", 
    };

कठिन मार्ग

यदि आप नहीं जानते हैं कि आपको कितने रंगों की आवश्यकता है, तो नीचे दिए गए कोड इस पैटर्न का उपयोग करके 896 रंग उत्पन्न करेंगे। (896 = 256 * 7/2) 256 प्रति चैनल रंग स्थान है, हमारे पास 7 पैटर्न हैं और हम केवल 1 रंग मान द्वारा अलग किए गए रंगों को प्राप्त करने से पहले रोकते हैं।

मैंने शायद इस कोड की कड़ी मेहनत की है, जिसकी मुझे ज़रूरत थी। सबसे पहले, एक तीव्रता जनरेटर है जो 255 से शुरू होता है, फिर ऊपर वर्णित पैटर्न के अनुसार मान उत्पन्न करता है। पैटर्न जनरेटर सिर्फ सात रंग पैटर्न के माध्यम से छोरों।

using System;

class Program {
    static void Main(string[] args) {
        ColourGenerator generator = new ColourGenerator();
        for (int i = 0; i < 896; i++) {
            Console.WriteLine(string.Format("{0}: {1}", i, generator.NextColour()));
        }
    }
}

public class ColourGenerator {

    private int index = 0;
    private IntensityGenerator intensityGenerator = new IntensityGenerator();

    public string NextColour() {
        string colour = string.Format(PatternGenerator.NextPattern(index),
            intensityGenerator.NextIntensity(index));
        index++;
        return colour;
    }
}

public class PatternGenerator {
    public static string NextPattern(int index) {
        switch (index % 7) {
        case 0: return "{0}0000";
        case 1: return "00{0}00";
        case 2: return "0000{0}";
        case 3: return "{0}{0}00";
        case 4: return "{0}00{0}";
        case 5: return "00{0}{0}";
        case 6: return "{0}{0}{0}";
        default: throw new Exception("Math error");
        }
    }
}

public class IntensityGenerator {
    private IntensityValueWalker walker;
    private int current;

    public string NextIntensity(int index) {
        if (index == 0) {
            current = 255;
        }
        else if (index % 7 == 0) {
            if (walker == null) {
                walker = new IntensityValueWalker();
            }
            else {
                walker.MoveNext();
            }
            current = walker.Current.Value;
        }
        string currentText = current.ToString("X");
        if (currentText.Length == 1) currentText = "0" + currentText;
        return currentText;
    }
}

public class IntensityValue {

    private IntensityValue mChildA;
    private IntensityValue mChildB;

    public IntensityValue(IntensityValue parent, int value, int level) {
        if (level > 7) throw new Exception("There are no more colours left");
        Value = value;
        Parent = parent;
        Level = level;
    }

    public int Level { get; set; }
    public int Value { get; set; }
    public IntensityValue Parent { get; set; }

    public IntensityValue ChildA {
        get {
            return mChildA ?? (mChildA = new IntensityValue(this, this.Value - (1<<(7-Level)), Level+1));
        }
    }

    public IntensityValue ChildB {
        get {
            return mChildB ?? (mChildB = new IntensityValue(this, Value + (1<<(7-Level)), Level+1));
        }
    }
}

public class IntensityValueWalker {

    public IntensityValueWalker() {
        Current = new IntensityValue(null, 1<<7, 1);
    }

    public IntensityValue Current { get; set; }

    public void MoveNext() {
        if (Current.Parent == null) {
            Current = Current.ChildA;
        }
        else if (Current.Parent.ChildA == Current) {
            Current = Current.Parent.ChildB;
        }
        else {
            int levelsUp = 1;
            Current = Current.Parent;
            while (Current.Parent != null && Current == Current.Parent.ChildB) {
                Current = Current.Parent;
                levelsUp++;
            }
            if (Current.Parent != null) {
                Current = Current.Parent.ChildB;
            }
            else {
                levelsUp++;
            }
            for (int i = 0; i < levelsUp; i++) {
                Current = Current.ChildA;
            }

        }
    }
}

मैं पूरी तरह से उदाहरण का पालन नहीं करता हूं। क्या कोई इसके लिए C # उदाहरण प्रदान कर सकता है?
मैकबैनुक

आशा है कि कोड नमूना मदद करता है - तीव्रता मूल्य के पेड़ के चलने का शायद एक बहुत ही साफ-सुथरा तरीका है, लेकिन यह एक पहला छुरा था जो काफी अच्छी तरह से काम करता था। चीयर्स।
सैम मेल्ड्रम

4
ध्यान दें कि यह एल्गोरिथ्म कुछ रंग जोड़े पैदा करेगा जो बहुत समान हैं (विशेष रूप से बहुत गहरे या हल्के, कम संतृप्ति क्षेत्रों में)। यह उच्च संतृप्ति और लपट के क्षेत्रों में शुरू करने का एक अच्छा काम करता है, लेकिन बहुत सारे सूक्ष्म रंगों को याद करता है जो अभी भी नेत्रहीन रूप से अलग हैं।
मेंढक

1
मैं जावास्क्रिप्ट में कुछ simliar कर रहा था - वहाँ एक मानसिक बैसाखी / rgb पर अभिकर्मक इमारत को सीमित करने लगता है। अगर हम था चार 256 पसंद रंग चैनलों, हम (* साथ फार्मूले लिखते थे n ) और अधिक रंग? फिर भी, @Phrogz की & @dean की आलोचना अभी भी खड़ी होगी (और यही कारण है कि मैंने एसओ को एक बेहतर उत्तर के लिए खोजा)। प्रत्येक तीव्रता के कदम पर अलग-अलग रंगों को पकड़ने का एक तरीका होना चाहिए। फीरोज का जवाब, नीचे सही रास्ते पर है, लेकिन कुछ intकाउंटरों द्वारा सैकड़ों रंगों को चाहने पर खुद की तरह चपरासियों के लिए जल्दी से सुलभ नहीं है ।
रफिन

2
मैंने सवाल का हल करते हुए एक उत्तर दिया। यहाँ यह उत्तर वास्तव में गलत है। जब आप मिक्स में 128 मिला दें। आप इसे केवल 0. के साथ पैटर्न नहीं देते हैं। आप इसे 0 और 255 के साथ पैटर्न करते हैं। "इजी वे" रंग सूची इस संबंध में समान रूप से टूटी हुई है। वे मूल रूप से व्हाइट, ब्लैक, आर, जी, बी, सी, वाई, एम उत्तरोत्तर मूर्छित और बेहोश करने वाले हैं।
बजे

80

एक विविधता सूची को लागू करने के लिए जहां आपके रंग चलते हैं, 255 तब उस की सभी संभावनाओं का उपयोग करें, फिर उन दो मानों के साथ 0 और सभी RGB पैटर्न जोड़ें। फिर उन लोगों के साथ 128 और सभी आरजीबी संयोजन जोड़ें। फिर 64. फिर 192. आदि।

जावा में,

public Color getColor(int i) {
    return new Color(getRGB(i));
}

public int getRGB(int index) {
    int[] p = getPattern(index);
    return getElement(p[0]) << 16 | getElement(p[1]) << 8 | getElement(p[2]);
}

public int getElement(int index) {
    int value = index - 1;
    int v = 0;
    for (int i = 0; i < 8; i++) {
        v = v | (value & 1);
        v <<= 1;
        value >>= 1;
    }
    v >>= 1;
    return v & 0xFF;
}

public int[] getPattern(int index) {
    int n = (int)Math.cbrt(index);
    index -= (n*n*n);
    int[] p = new int[3];
    Arrays.fill(p,n);
    if (index == 0) {
        return p;
    }
    index--;
    int v = index % 3;
    index = index / 3;
    if (index < n) {
        p[v] = index % n;
        return p;
    }
    index -= n;
    p[v      ] = index / n;
    p[++v % 3] = index % n;
    return p;
}

यह भविष्य में उस प्रकार के पैटर्न (2 ^ 24) का उत्पादन करेगा। हालांकि, एक सौ या इतने ही धब्बों के बाद आपको नीले रंग के स्थान पर 0 या 32 के साथ एक रंग के बीच बहुत अंतर दिखाई नहीं देगा।

आप इसे एक अलग रंग स्थान में सामान्य करने से बेहतर हो सकते हैं। एल, ए, बी के साथ उदाहरण के लिए एलएबी रंग अंतरिक्ष सामान्यीकृत और परिवर्तित। तो रंग की विशिष्टता मानव आंख के लिए कुछ और अधिक के माध्यम से धक्का दिया है।

getElement () 8 बिट संख्या के एंडियन को उलट देता है, और 0 के बजाय -1 से गिनती शुरू करता है (255 के साथ मास्किंग)। तो यह 255,0,127,192,64 हो जाता है, ... संख्या बढ़ने पर यह कम और कम महत्वपूर्ण बिट्स को स्थानांतरित करता है, संख्या को विभाजित करता है।

getPattern () यह निर्धारित करता है कि पैटर्न में सबसे महत्वपूर्ण तत्व क्या होना चाहिए (यह घनमूल है)। फिर 3N² + 3N + 1 को तोड़ने के लिए आगे बढ़ता है जिसमें सबसे महत्वपूर्ण तत्व शामिल होता है।

यह एल्गोरिथम उत्पादन करेगा (पहले 128 मान):

#FFFFFF 
#000000 
#FF0000 
#00FF00 
#0000FF 
#FFFF00 
#00FFFF 
#FF00FF 
#808080 
#FF8080 
#80FF80 
#8080FF 
#008080 
#800080 
#808000 
#FFFF80 
#80FFFF 
#FF80FF 
#FF0080 
#80FF00 
#0080FF 
#00FF80 
#8000FF 
#FF8000 
#000080 
#800000 
#008000 
#404040 
#FF4040 
#40FF40 
#4040FF 
#004040 
#400040 
#404000 
#804040 
#408040 
#404080 
#FFFF40 
#40FFFF 
#FF40FF 
#FF0040 
#40FF00 
#0040FF 
#FF8040 
#40FF80 
#8040FF 
#00FF40 
#4000FF 
#FF4000 
#000040 
#400000 
#004000 
#008040 
#400080 
#804000 
#80FF40 
#4080FF 
#FF4080 
#800040 
#408000 
#004080 
#808040 
#408080 
#804080 
#C0C0C0 
#FFC0C0 
#C0FFC0 
#C0C0FF 
#00C0C0 
#C000C0 
#C0C000 
#80C0C0 
#C080C0 
#C0C080 
#40C0C0 
#C040C0 
#C0C040 
#FFFFC0 
#C0FFFF 
#FFC0FF 
#FF00C0 
#C0FF00 
#00C0FF 
#FF80C0 
#C0FF80 
#80C0FF 
#FF40C0 
#C0FF40 
#40C0FF 
#00FFC0 
#C000FF 
#FFC000 
#0000C0 
#C00000 
#00C000 
#0080C0 
#C00080 
#80C000 
#0040C0 
#C00040 
#40C000 
#80FFC0 
#C080FF 
#FFC080 
#8000C0 
#C08000 
#00C080 
#8080C0 
#C08080 
#80C080 
#8040C0 
#C08040 
#40C080 
#40FFC0 
#C040FF 
#FFC040 
#4000C0 
#C04000 
#00C040 
#4080C0 
#C04080 
#80C040 
#4040C0 
#C04040 
#40C040 
#202020 
#FF2020 
#20FF20 

बाएँ से दाएँ पढ़ें, ऊपर से नीचे। 729 रंग (929)। तो n = 9. तक के सभी पैटर्न आपको उस गति की सूचना देंगे जिस पर वे टकराव शुरू करते हैं। केवल कई WRGBCYMK विविधताएँ हैं। और यह समाधान, जबकि चालाक मूल रूप से केवल प्राथमिक रंगों के विभिन्न रंगों को करता है।

रंग ग्रिड, 729 16x16

ज्यादातर क्लैशिंग हरे रंग के कारण होती है और कैसे ज्यादातर लोगों के लिए समान ग्रीन्स दिखते हैं। मांग है कि प्रत्येक अधिकतम अधिकतम भिन्न होने के बजाय केवल एक ही रंग के लिए अलग-अलग हो। और प्राथमिक रंग पैटर्न, और समान रंग के परिणामस्वरूप विचार में बुनियादी दोष।


बेतरतीब ढंग से चयन करने और 10k विभिन्न रंगों की कोशिश करने के लिए CIELab2000 कलर स्पेस और डिस्टेंस रूटीन का उपयोग करना और पिछले रंगों से अधिकतम-दूर न्यूनतम-दूरी का पता लगाना, (अनुरोध की परिभाषा) बहुत अधिक उपरोक्त समाधान से अधिक समय तक टकराव से बचा जाता है:

अधिकतम रंग दूरी

जिसे ईज़ी वे के लिए सिर्फ स्टैटिक लिस्ट कहा जा सकता है। 729 प्रविष्टियाँ बनाने में एक घंटा और आधा समय लगा:

#9BC4E5
#310106
#04640D
#FEFB0A
#FB5514
#E115C0
#00587F
#0BC582
#FEB8C8
#9E8317
#01190F
#847D81
#58018B
#B70639
#703B01
#F7F1DF
#118B8A
#4AFEFA
#FCB164
#796EE6
#000D2C
#53495F
#F95475
#61FC03
#5D9608
#DE98FD
#98A088
#4F584E
#248AD0
#5C5300
#9F6551
#BCFEC6
#932C70
#2B1B04
#B5AFC4
#D4C67A
#AE7AA1
#C2A393
#0232FD
#6A3A35
#BA6801
#168E5C
#16C0D0
#C62100
#014347
#233809
#42083B
#82785D
#023087
#B7DAD2
#196956
#8C41BB
#ECEDFE
#2B2D32
#94C661
#F8907D
#895E6B
#788E95
#FB6AB8
#576094
#DB1474
#8489AE
#860E04
#FBC206
#6EAB9B
#F2CDFE
#645341
#760035
#647A41
#496E76
#E3F894
#F9D7CD
#876128
#A1A711
#01FB92
#FD0F31
#BE8485
#C660FB
#120104
#D48958
#05AEE8
#C3C1BE
#9F98F8
#1167D9
#D19012
#B7D802
#826392
#5E7A6A
#B29869
#1D0051
#8BE7FC
#76E0C1
#BACFA7
#11BA09
#462C36
#65407D
#491803
#F5D2A8
#03422C
#72A46E
#128EAC
#47545E
#B95C69
#A14D12
#C4C8FA
#372A55
#3F3610
#D3A2C6
#719FFA
#0D841A
#4C5B32
#9DB3B7
#B14F8F
#747103
#9F816D
#D26A5B
#8B934B
#F98500
#002935
#D7F3FE
#FCB899
#1C0720
#6B5F61
#F98A9D
#9B72C2
#A6919D
#2C3729
#D7C70B
#9F9992
#EFFBD0
#FDE2F1
#923A52
#5140A7
#BC14FD
#6D706C
#0007C4
#C6A62F
#000C14
#904431
#600013
#1C1B08
#693955
#5E7C99
#6C6E82
#D0AFB3
#493B36
#AC93CE
#C4BA9C
#09C4B8
#69A5B8
#374869
#F868ED
#E70850
#C04841
#C36333
#700366
#8A7A93
#52351D
#B503A2
#D17190
#A0F086
#7B41FC
#0EA64F
#017499
#08A882
#7300CD
#A9B074
#4E6301
#AB7E41
#547FF4
#134DAC
#FDEC87
#056164
#FE12A0
#C264BA
#939DAD
#0BCDFA
#277442
#1BDE4A
#826958
#977678
#BAFCE8
#7D8475
#8CCF95
#726638
#FEA8EB
#EAFEF0
#6B9279
#C2FE4B
#304041
#1EA6A7
#022403
#062A47
#054B17
#F4C673
#02FEC7
#9DBAA8
#775551
#835536
#565BCC
#80D7D2
#7AD607
#696F54
#87089A
#664B19
#242235
#7DB00D
#BFC7D6
#D5A97E
#433F31
#311A18
#FDB2AB
#D586C9
#7A5FB1
#32544A
#EFE3AF
#859D96
#2B8570
#8B282D
#E16A07
#4B0125
#021083
#114558
#F707F9
#C78571
#7FB9BC
#FC7F4B
#8D4A92
#6B3119
#884F74
#994E4F
#9DA9D3
#867B40
#CED5C4
#1CA2FE
#D9C5B4
#FEAA00
#507B01
#A7D0DB
#53858D
#588F4A
#FBEEEC
#FC93C1
#D7CCD4
#3E4A02
#C8B1E2
#7A8B62
#9A5AE2
#896C04
#B1121C
#402D7D
#858701
#D498A6
#B484EF
#5C474C
#067881
#C0F9FC
#726075
#8D3101
#6C93B2
#A26B3F
#AA6582
#4F4C4F
#5A563D
#E83005
#32492D
#FC7272
#B9C457
#552A5B
#B50464
#616E79
#DCE2E4
#CF8028
#0AE2F0
#4F1E24
#FD5E46
#4B694E
#C5DEFC
#5DC262
#022D26
#7776B8
#FD9F66
#B049B8
#988F73
#BE385A
#2B2126
#54805A
#141B55
#67C09B
#456989
#DDC1D9
#166175
#C1E29C
#A397B5
#2E2922
#ABDBBE
#B4A6A8
#A06B07
#A99949
#0A0618
#B14E2E
#60557D
#D4A556
#82A752
#4A005B
#3C404F
#6E6657
#7E8BD5
#1275B8
#D79E92
#230735
#661849
#7A8391
#FE0F7B
#B0B6A9
#629591
#D05591
#97B68A
#97939A
#035E38
#53E19E
#DFD7F9
#02436C
#525A72
#059A0E
#3E736C
#AC8E87
#D10C92
#B9906E
#66BDFD
#C0ABFD
#0734BC
#341224
#8AAAC1
#0E0B03
#414522
#6A2F3E
#2D9A8A
#4568FD
#FDE6D2
#FEE007
#9A003C
#AC8190
#DCDD58
#B7903D
#1F2927
#9B02E6
#827A71
#878B8A
#8F724F
#AC4B70
#37233B
#385559
#F347C7
#9DB4FE
#D57179
#DE505A
#37F7DD
#503500
#1C2401
#DD0323
#00A4BA
#955602
#FA5B94
#AA766C
#B8E067
#6A807E
#4D2E27
#73BED7
#D7BC8A
#614539
#526861
#716D96
#829A17
#210109
#436C2D
#784955
#987BAB
#8F0152
#0452FA
#B67757
#A1659F
#D4F8D8
#48416F
#DEBAAF
#A5A9AA
#8C6B83
#403740
#70872B
#D9744D
#151E2C
#5C5E5E
#B47C02
#F4CBD0
#E49D7D
#DD9954
#B0A18B
#2B5308
#EDFD64
#9D72FC
#2A3351
#68496C
#C94801
#EED05E
#826F6D
#E0D6BB
#5B6DB4
#662F98
#0C97CA
#C1CA89
#755A03
#DFA619
#CD70A8
#BBC9C7
#F6BCE3
#A16462
#01D0AA
#87C6B3
#E7B2FA
#D85379
#643AD5
#D18AAE
#13FD5E
#B3E3FD
#C977DB
#C1A7BB
#9286CB
#A19B6A
#8FFED7
#6B1F17
#DF503A
#10DDD7
#9A8457
#60672F
#7D327D
#DD8782
#59AC42
#82FDB8
#FC8AE7
#909F6F
#B691AE
#B811CD
#BCB24E
#CB4BD9
#2B2304
#AA9501
#5D5096
#403221
#F9FAB4
#3990FC
#70DE7F
#95857F
#84A385
#50996F
#797B53
#7B6142
#81D5FE
#9CC428
#0B0438
#3E2005
#4B7C91
#523854
#005EA9
#F0C7AD
#ACB799
#FAC08E
#502239
#BFAB6A
#2B3C48
#0EB5D8
#8A5647
#49AF74
#067AE9
#F19509
#554628
#4426A4
#7352C9
#3F4287
#8B655E
#B480BF
#9BA74C
#5F514C
#CC9BDC
#BA7942
#1C4138
#3C3C3A
#29B09C
#02923F
#701D2B
#36577C
#3F00EA
#3D959E
#440601
#8AEFF3
#6D442A
#BEB1A8
#A11C02
#8383FE
#A73839
#DBDE8A
#0283B3
#888597
#32592E
#F5FDFA
#01191B
#AC707A
#B6BD03
#027B59
#7B4F08
#957737
#83727D
#035543
#6F7E64
#C39999
#52847A
#925AAC
#77CEDA
#516369
#E0D7D0
#FCDD97
#555424
#96E6B6
#85BB74
#5E2074
#BD5E48
#9BEE53
#1A351E
#3148CD
#71575F
#69A6D0
#391A62
#E79EA0
#1C0F03
#1B1636
#D20C39
#765396
#7402FE
#447F3E
#CFD0A8
#3A2600
#685AFC
#A4B3C6
#534302
#9AA097
#FD5154
#9B0085
#403956
#80A1A7
#6E7A9A
#605E6A
#86F0E2
#5A2B01
#7E3D43
#ED823B
#32331B
#424837
#40755E
#524F48
#B75807
#B40080
#5B8CA1
#FDCFE5
#CCFEAC
#755847
#CAB296
#C0D6E3
#2D7100
#D5E4DE
#362823
#69C63C
#AC3801
#163132
#4750A6
#61B8B2
#FCC4B5
#DEBA2E
#FE0449
#737930
#8470AB
#687D87
#D7B760
#6AAB86
#8398B8
#B7B6BF
#92C4A1
#B6084F
#853B5E
#D0BCBA
#92826D
#C6DDC6
#BE5F5A
#280021
#435743
#874514
#63675A
#E97963
#8F9C9E
#985262
#909081
#023508
#DDADBF
#D78493
#363900
#5B0120
#603C47
#C3955D
#AC61CB
#FD7BA7
#716C74
#8D895B
#071001
#82B4F2
#B6BBD8
#71887A
#8B9FE3
#997158
#65A6AB
#2E3067
#321301
#FEECCB
#3B5E72
#C8FE85
#A1DCDF
#CB49A6
#B1C5E4
#3E5EB0
#88AEA7
#04504C
#975232
#6786B9
#068797
#9A98C4
#A1C3C2
#1C3967
#DBEA07
#789658
#E7E7C6
#A6C886
#957F89
#752E62
#171518
#A75648
#01D26F
#0F535D
#047E76
#C54754
#5D6E88
#AB9483
#803B99
#FA9C48
#4A8A22
#654A5C
#965F86
#9D0CBB
#A0E8A0
#D3DBFA
#FD908F
#AEAB85
#A13B89
#F1B350
#066898
#948A42
#C8BEDE
#19252C
#7046AA
#E1EEFC
#3E6557
#CD3F26
#2B1925
#DDAD94
#C0B109
#37DFFE
#039676
#907468
#9E86A5
#3A1B49
#BEE5B7
#C29501
#9E3645
#DC580A
#645631
#444B4B
#FD1A63
#DDE5AE
#887800
#36006F
#3A6260
#784637
#FEA0B7
#A3E0D2
#6D6316
#5F7172
#B99EC7
#777A7E
#E0FEFD
#E16DC5
#01344B
#F8F8FC
#9F9FB5
#182617
#FE3D21
#7D0017
#822F21
#EFD9DC
#6E68C4
#35473E
#007523
#767667
#A6825D
#83DC5F
#227285
#A95E34
#526172
#979730
#756F6D
#716259
#E8B2B5
#B6C9BB
#9078DA
#4F326E
#B2387B
#888C6F
#314B5F
#E5B678
#38A3C6
#586148
#5C515B
#CDCCE1
#C8977F

करने के लिए क्रूर बल का उपयोग करना (सभी 16,777,216 RGB रंगों को CIELab Delta2000 / ब्लैक के साथ शुरू करके) एक श्रृंखला का निर्माण करता है। जो लगभग 26 पर शुरू होता है, लेकिन दृश्य निरीक्षण और मैनुअल ड्रॉपिंग के साथ इसे 30 या 40 कर सकता है (जो कंप्यूटर के साथ नहीं किया जा सकता है)। तो निरपेक्ष अधिकतम एक प्रोग्राम कर सकते हैं केवल एक जोड़े को दर्जन अलग अलग रंग बनाता है। एक असतत सूची आपकी सबसे अच्छी शर्त है। आप एक सूची के साथ अधिक असतत रंग मिल जाएगा की तुलना में आप प्रोग्राम होगा। आसान तरीका सबसे अच्छा उपाय है, अपने डेटा को रंग से बदलने के लिए अन्य तरीकों से मिश्रण और मिलान करना शुरू करें।

मैक्सिमली अलग

#000000
#00FF00
#0000FF
#FF0000
#01FFFE
#FFA6FE
#FFDB66
#006401
#010067
#95003A
#007DB5
#FF00F6
#FFEEE8
#774D00
#90FB92
#0076FF
#D5FF00
#FF937E
#6A826C
#FF029D
#FE8900
#7A4782
#7E2DD2
#85A900
#FF0056
#A42400
#00AE7E
#683D3B
#BDC6FF
#263400
#BDD393
#00B917
#9E008E
#001544
#C28C9F
#FF74A3
#01D0FF
#004754
#E56FFE
#788231
#0E4CA1
#91D0CB
#BE9970
#968AE8
#BB8800
#43002C
#DEFF74
#00FFC6
#FFE502
#620E00
#008F9C
#98FF52
#7544B1
#B500FF
#00FF78
#FF6E41
#005F39
#6B6882
#5FAD4E
#A75740
#A5FFD2
#FFB167
#009BFF
#E85EBE

अद्यतन: मैंने इसे लगभग एक महीने के लिए जारी रखा, इसलिए 1024 ब्रूट बल पर। 1024

public static final String[] indexcolors = new String[]{
        "#000000", "#FFFF00", "#1CE6FF", "#FF34FF", "#FF4A46", "#008941", "#006FA6", "#A30059",
        "#FFDBE5", "#7A4900", "#0000A6", "#63FFAC", "#B79762", "#004D43", "#8FB0FF", "#997D87",
        "#5A0007", "#809693", "#FEFFE6", "#1B4400", "#4FC601", "#3B5DFF", "#4A3B53", "#FF2F80",
        "#61615A", "#BA0900", "#6B7900", "#00C2A0", "#FFAA92", "#FF90C9", "#B903AA", "#D16100",
        "#DDEFFF", "#000035", "#7B4F4B", "#A1C299", "#300018", "#0AA6D8", "#013349", "#00846F",
        "#372101", "#FFB500", "#C2FFED", "#A079BF", "#CC0744", "#C0B9B2", "#C2FF99", "#001E09",
        "#00489C", "#6F0062", "#0CBD66", "#EEC3FF", "#456D75", "#B77B68", "#7A87A1", "#788D66",
        "#885578", "#FAD09F", "#FF8A9A", "#D157A0", "#BEC459", "#456648", "#0086ED", "#886F4C",
        "#34362D", "#B4A8BD", "#00A6AA", "#452C2C", "#636375", "#A3C8C9", "#FF913F", "#938A81",
        "#575329", "#00FECF", "#B05B6F", "#8CD0FF", "#3B9700", "#04F757", "#C8A1A1", "#1E6E00",
        "#7900D7", "#A77500", "#6367A9", "#A05837", "#6B002C", "#772600", "#D790FF", "#9B9700",
        "#549E79", "#FFF69F", "#201625", "#72418F", "#BC23FF", "#99ADC0", "#3A2465", "#922329",
        "#5B4534", "#FDE8DC", "#404E55", "#0089A3", "#CB7E98", "#A4E804", "#324E72", "#6A3A4C",
        "#83AB58", "#001C1E", "#D1F7CE", "#004B28", "#C8D0F6", "#A3A489", "#806C66", "#222800",
        "#BF5650", "#E83000", "#66796D", "#DA007C", "#FF1A59", "#8ADBB4", "#1E0200", "#5B4E51",
        "#C895C5", "#320033", "#FF6832", "#66E1D3", "#CFCDAC", "#D0AC94", "#7ED379", "#012C58",
        "#7A7BFF", "#D68E01", "#353339", "#78AFA1", "#FEB2C6", "#75797C", "#837393", "#943A4D",
        "#B5F4FF", "#D2DCD5", "#9556BD", "#6A714A", "#001325", "#02525F", "#0AA3F7", "#E98176",
        "#DBD5DD", "#5EBCD1", "#3D4F44", "#7E6405", "#02684E", "#962B75", "#8D8546", "#9695C5",
        "#E773CE", "#D86A78", "#3E89BE", "#CA834E", "#518A87", "#5B113C", "#55813B", "#E704C4",
        "#00005F", "#A97399", "#4B8160", "#59738A", "#FF5DA7", "#F7C9BF", "#643127", "#513A01",
        "#6B94AA", "#51A058", "#A45B02", "#1D1702", "#E20027", "#E7AB63", "#4C6001", "#9C6966",
        "#64547B", "#97979E", "#006A66", "#391406", "#F4D749", "#0045D2", "#006C31", "#DDB6D0",
        "#7C6571", "#9FB2A4", "#00D891", "#15A08A", "#BC65E9", "#FFFFFE", "#C6DC99", "#203B3C",
        "#671190", "#6B3A64", "#F5E1FF", "#FFA0F2", "#CCAA35", "#374527", "#8BB400", "#797868",
        "#C6005A", "#3B000A", "#C86240", "#29607C", "#402334", "#7D5A44", "#CCB87C", "#B88183",
        "#AA5199", "#B5D6C3", "#A38469", "#9F94F0", "#A74571", "#B894A6", "#71BB8C", "#00B433",
        "#789EC9", "#6D80BA", "#953F00", "#5EFF03", "#E4FFFC", "#1BE177", "#BCB1E5", "#76912F",
        "#003109", "#0060CD", "#D20096", "#895563", "#29201D", "#5B3213", "#A76F42", "#89412E",
        "#1A3A2A", "#494B5A", "#A88C85", "#F4ABAA", "#A3F3AB", "#00C6C8", "#EA8B66", "#958A9F",
        "#BDC9D2", "#9FA064", "#BE4700", "#658188", "#83A485", "#453C23", "#47675D", "#3A3F00",
        "#061203", "#DFFB71", "#868E7E", "#98D058", "#6C8F7D", "#D7BFC2", "#3C3E6E", "#D83D66",
        "#2F5D9B", "#6C5E46", "#D25B88", "#5B656C", "#00B57F", "#545C46", "#866097", "#365D25",
        "#252F99", "#00CCFF", "#674E60", "#FC009C", "#92896B", "#1E2324", "#DEC9B2", "#9D4948",
        "#85ABB4", "#342142", "#D09685", "#A4ACAC", "#00FFFF", "#AE9C86", "#742A33", "#0E72C5",
        "#AFD8EC", "#C064B9", "#91028C", "#FEEDBF", "#FFB789", "#9CB8E4", "#AFFFD1", "#2A364C",
        "#4F4A43", "#647095", "#34BBFF", "#807781", "#920003", "#B3A5A7", "#018615", "#F1FFC8",
        "#976F5C", "#FF3BC1", "#FF5F6B", "#077D84", "#F56D93", "#5771DA", "#4E1E2A", "#830055",
        "#02D346", "#BE452D", "#00905E", "#BE0028", "#6E96E3", "#007699", "#FEC96D", "#9C6A7D",
        "#3FA1B8", "#893DE3", "#79B4D6", "#7FD4D9", "#6751BB", "#B28D2D", "#E27A05", "#DD9CB8",
        "#AABC7A", "#980034", "#561A02", "#8F7F00", "#635000", "#CD7DAE", "#8A5E2D", "#FFB3E1",
        "#6B6466", "#C6D300", "#0100E2", "#88EC69", "#8FCCBE", "#21001C", "#511F4D", "#E3F6E3",
        "#FF8EB1", "#6B4F29", "#A37F46", "#6A5950", "#1F2A1A", "#04784D", "#101835", "#E6E0D0",
        "#FF74FE", "#00A45F", "#8F5DF8", "#4B0059", "#412F23", "#D8939E", "#DB9D72", "#604143",
        "#B5BACE", "#989EB7", "#D2C4DB", "#A587AF", "#77D796", "#7F8C94", "#FF9B03", "#555196",
        "#31DDAE", "#74B671", "#802647", "#2A373F", "#014A68", "#696628", "#4C7B6D", "#002C27",
        "#7A4522", "#3B5859", "#E5D381", "#FFF3FF", "#679FA0", "#261300", "#2C5742", "#9131AF",
        "#AF5D88", "#C7706A", "#61AB1F", "#8CF2D4", "#C5D9B8", "#9FFFFB", "#BF45CC", "#493941",
        "#863B60", "#B90076", "#003177", "#C582D2", "#C1B394", "#602B70", "#887868", "#BABFB0",
        "#030012", "#D1ACFE", "#7FDEFE", "#4B5C71", "#A3A097", "#E66D53", "#637B5D", "#92BEA5",
        "#00F8B3", "#BEDDFF", "#3DB5A7", "#DD3248", "#B6E4DE", "#427745", "#598C5A", "#B94C59",
        "#8181D5", "#94888B", "#FED6BD", "#536D31", "#6EFF92", "#E4E8FF", "#20E200", "#FFD0F2",
        "#4C83A1", "#BD7322", "#915C4E", "#8C4787", "#025117", "#A2AA45", "#2D1B21", "#A9DDB0",
        "#FF4F78", "#528500", "#009A2E", "#17FCE4", "#71555A", "#525D82", "#00195A", "#967874",
        "#555558", "#0B212C", "#1E202B", "#EFBFC4", "#6F9755", "#6F7586", "#501D1D", "#372D00",
        "#741D16", "#5EB393", "#B5B400", "#DD4A38", "#363DFF", "#AD6552", "#6635AF", "#836BBA",
        "#98AA7F", "#464836", "#322C3E", "#7CB9BA", "#5B6965", "#707D3D", "#7A001D", "#6E4636",
        "#443A38", "#AE81FF", "#489079", "#897334", "#009087", "#DA713C", "#361618", "#FF6F01",
        "#006679", "#370E77", "#4B3A83", "#C9E2E6", "#C44170", "#FF4526", "#73BE54", "#C4DF72",
        "#ADFF60", "#00447D", "#DCCEC9", "#BD9479", "#656E5B", "#EC5200", "#FF6EC2", "#7A617E",
        "#DDAEA2", "#77837F", "#A53327", "#608EFF", "#B599D7", "#A50149", "#4E0025", "#C9B1A9",
        "#03919A", "#1B2A25", "#E500F1", "#982E0B", "#B67180", "#E05859", "#006039", "#578F9B",
        "#305230", "#CE934C", "#B3C2BE", "#C0BAC0", "#B506D3", "#170C10", "#4C534F", "#224451",
        "#3E4141", "#78726D", "#B6602B", "#200441", "#DDB588", "#497200", "#C5AAB6", "#033C61",
        "#71B2F5", "#A9E088", "#4979B0", "#A2C3DF", "#784149", "#2D2B17", "#3E0E2F", "#57344C",
        "#0091BE", "#E451D1", "#4B4B6A", "#5C011A", "#7C8060", "#FF9491", "#4C325D", "#005C8B",
        "#E5FDA4", "#68D1B6", "#032641", "#140023", "#8683A9", "#CFFF00", "#A72C3E", "#34475A",
        "#B1BB9A", "#B4A04F", "#8D918E", "#A168A6", "#813D3A", "#425218", "#DA8386", "#776133",
        "#563930", "#8498AE", "#90C1D3", "#B5666B", "#9B585E", "#856465", "#AD7C90", "#E2BC00",
        "#E3AAE0", "#B2C2FE", "#FD0039", "#009B75", "#FFF46D", "#E87EAC", "#DFE3E6", "#848590",
        "#AA9297", "#83A193", "#577977", "#3E7158", "#C64289", "#EA0072", "#C4A8CB", "#55C899",
        "#E78FCF", "#004547", "#F6E2E3", "#966716", "#378FDB", "#435E6A", "#DA0004", "#1B000F",
        "#5B9C8F", "#6E2B52", "#011115", "#E3E8C4", "#AE3B85", "#EA1CA9", "#FF9E6B", "#457D8B",
        "#92678B", "#00CDBB", "#9CCC04", "#002E38", "#96C57F", "#CFF6B4", "#492818", "#766E52",
        "#20370E", "#E3D19F", "#2E3C30", "#B2EACE", "#F3BDA4", "#A24E3D", "#976FD9", "#8C9FA8",
        "#7C2B73", "#4E5F37", "#5D5462", "#90956F", "#6AA776", "#DBCBF6", "#DA71FF", "#987C95",
        "#52323C", "#BB3C42", "#584D39", "#4FC15F", "#A2B9C1", "#79DB21", "#1D5958", "#BD744E",
        "#160B00", "#20221A", "#6B8295", "#00E0E4", "#102401", "#1B782A", "#DAA9B5", "#B0415D",
        "#859253", "#97A094", "#06E3C4", "#47688C", "#7C6755", "#075C00", "#7560D5", "#7D9F00",
        "#C36D96", "#4D913E", "#5F4276", "#FCE4C8", "#303052", "#4F381B", "#E5A532", "#706690",
        "#AA9A92", "#237363", "#73013E", "#FF9079", "#A79A74", "#029BDB", "#FF0169", "#C7D2E7",
        "#CA8869", "#80FFCD", "#BB1F69", "#90B0AB", "#7D74A9", "#FCC7DB", "#99375B", "#00AB4D",
        "#ABAED1", "#BE9D91", "#E6E5A7", "#332C22", "#DD587B", "#F5FFF7", "#5D3033", "#6D3800",
        "#FF0020", "#B57BB3", "#D7FFE6", "#C535A9", "#260009", "#6A8781", "#A8ABB4", "#D45262",
        "#794B61", "#4621B2", "#8DA4DB", "#C7C890", "#6FE9AD", "#A243A7", "#B2B081", "#181B00",
        "#286154", "#4CA43B", "#6A9573", "#A8441D", "#5C727B", "#738671", "#D0CFCB", "#897B77",
        "#1F3F22", "#4145A7", "#DA9894", "#A1757A", "#63243C", "#ADAAFF", "#00CDE2", "#DDBC62",
        "#698EB1", "#208462", "#00B7E0", "#614A44", "#9BBB57", "#7A5C54", "#857A50", "#766B7E",
        "#014833", "#FF8347", "#7A8EBA", "#274740", "#946444", "#EBD8E6", "#646241", "#373917",
        "#6AD450", "#81817B", "#D499E3", "#979440", "#011A12", "#526554", "#B5885C", "#A499A5",
        "#03AD89", "#B3008B", "#E3C4B5", "#96531F", "#867175", "#74569E", "#617D9F", "#E70452",
        "#067EAF", "#A697B6", "#B787A8", "#9CFF93", "#311D19", "#3A9459", "#6E746E", "#B0C5AE",
        "#84EDF7", "#ED3488", "#754C78", "#384644", "#C7847B", "#00B6C5", "#7FA670", "#C1AF9E",
        "#2A7FFF", "#72A58C", "#FFC07F", "#9DEBDD", "#D97C8E", "#7E7C93", "#62E674", "#B5639E",
        "#FFA861", "#C2A580", "#8D9C83", "#B70546", "#372B2E", "#0098FF", "#985975", "#20204C",
        "#FF6C60", "#445083", "#8502AA", "#72361F", "#9676A3", "#484449", "#CED6C2", "#3B164A",
        "#CCA763", "#2C7F77", "#02227B", "#A37E6F", "#CDE6DC", "#CDFFFB", "#BE811A", "#F77183",
        "#EDE6E2", "#CDC6B4", "#FFE09E", "#3A7271", "#FF7B59", "#4E4E01", "#4AC684", "#8BC891",
        "#BC8A96", "#CF6353", "#DCDE5C", "#5EAADD", "#F6A0AD", "#E269AA", "#A3DAE4", "#436E83",
        "#002E17", "#ECFBFF", "#A1C2B6", "#50003F", "#71695B", "#67C4BB", "#536EFF", "#5D5A48",
        "#890039", "#969381", "#371521", "#5E4665", "#AA62C3", "#8D6F81", "#2C6135", "#410601",
        "#564620", "#E69034", "#6DA6BD", "#E58E56", "#E3A68B", "#48B176", "#D27D67", "#B5B268",
        "#7F8427", "#FF84E6", "#435740", "#EAE408", "#F4F5FF", "#325800", "#4B6BA5", "#ADCEFF",
        "#9B8ACC", "#885138", "#5875C1", "#7E7311", "#FEA5CA", "#9F8B5B", "#A55B54", "#89006A",
        "#AF756F", "#2A2000", "#576E4A", "#7F9EFF", "#7499A1", "#FFB550", "#00011E", "#D1511C",
        "#688151", "#BC908A", "#78C8EB", "#8502FF", "#483D30", "#C42221", "#5EA7FF", "#785715",
        "#0CEA91", "#FFFAED", "#B3AF9D", "#3E3D52", "#5A9BC2", "#9C2F90", "#8D5700", "#ADD79C",
        "#00768B", "#337D00", "#C59700", "#3156DC", "#944575", "#ECFFDC", "#D24CB2", "#97703C",
        "#4C257F", "#9E0366", "#88FFEC", "#B56481", "#396D2B", "#56735F", "#988376", "#9BB195",
        "#A9795C", "#E4C5D3", "#9F4F67", "#1E2B39", "#664327", "#AFCE78", "#322EDF", "#86B487",
        "#C23000", "#ABE86B", "#96656D", "#250E35", "#A60019", "#0080CF", "#CAEFFF", "#323F61",
        "#A449DC", "#6A9D3B", "#FF5AE4", "#636A01", "#D16CDA", "#736060", "#FFBAAD", "#D369B4",
        "#FFDED6", "#6C6D74", "#927D5E", "#845D70", "#5B62C1", "#2F4A36", "#E45F35", "#FF3B53",
        "#AC84DD", "#762988", "#70EC98", "#408543", "#2C3533", "#2E182D", "#323925", "#19181B",
        "#2F2E2C", "#023C32", "#9B9EE2", "#58AFAD", "#5C424D", "#7AC5A6", "#685D75", "#B9BCBD",
        "#834357", "#1A7B42", "#2E57AA", "#E55199", "#316E47", "#CD00C5", "#6A004D", "#7FBBEC",
        "#F35691", "#D7C54A", "#62ACB7", "#CBA1BC", "#A28A9A", "#6C3F3B", "#FFE47D", "#DCBAE3",
        "#5F816D", "#3A404A", "#7DBF32", "#E6ECDC", "#852C19", "#285366", "#B8CB9C", "#0E0D00",
        "#4B5D56", "#6B543F", "#E27172", "#0568EC", "#2EB500", "#D21656", "#EFAFFF", "#682021",
        "#2D2011", "#DA4CFF", "#70968E", "#FF7B7D", "#4A1930", "#E8C282", "#E7DBBC", "#A68486",
        "#1F263C", "#36574E", "#52CE79", "#ADAAA9", "#8A9F45", "#6542D2", "#00FB8C", "#5D697B",
        "#CCD27F", "#94A5A1", "#790229", "#E383E6", "#7EA4C1", "#4E4452", "#4B2C00", "#620B70",
        "#314C1E", "#874AA6", "#E30091", "#66460A", "#EB9A8B", "#EAC3A3", "#98EAB3", "#AB9180",
        "#B8552F", "#1A2B2F", "#94DDC5", "#9D8C76", "#9C8333", "#94A9C9", "#392935", "#8C675E",
        "#CCE93A", "#917100", "#01400B", "#449896", "#1CA370", "#E08DA7", "#8B4A4E", "#667776",
        "#4692AD", "#67BDA8", "#69255C", "#D3BFFF", "#4A5132", "#7E9285", "#77733C", "#E7A0CC",
        "#51A288", "#2C656A", "#4D5C5E", "#C9403A", "#DDD7F3", "#005844", "#B4A200", "#488F69",
        "#858182", "#D4E9B9", "#3D7397", "#CAE8CE", "#D60034", "#AA6746", "#9E5585", "#BA6200"
    };

8
IMHO स्वीकृत उत्तर की तुलना में बहुत बेहतर है। और दृश्य उदाहरणों और पूर्व-सूचीबद्ध सूचियों के लिए +1!
गिडो

1
मैं पहले से सेट किए गए रंगों और रंगों के बीच CIEDE2000 को अधिकतम करने के लिए एक संपूर्ण खोज भी चला रहा था, पूर्वनिर्धारित रंगों के रूप में काले और सफेद रंग के साथ। आप की तरह मैं दो "स्किन टोन" पर जल्दी पहुँचता हूँ: # ff9d25 (नारंगी की ओर झुकाव) और # ffb46c (गुलाबी रंग की ओर झुकाव)। मुझे लगता है कि वे बहुत समान दिखते हैं इसलिए शायद CIEDE2000 एक अच्छा रंग अंतर उपाय नहीं है। फिलहाल वहाँ बेहतर कुछ नहीं है, हालांकि। यह मेरे अपने ध्यान देने योग्य-अंतर प्रयोगों को शुरू करने के लिए प्रलोभन है, शायद पहले 16x16x16 sRGB ग्रिड के साथ ...
ओली नीमितालो

मैं 1024 तक गया लेकिन मुझे एक महीने से अधिक समय हो गया। आप इसे अन्य रंग सेटों के साथ समान रूप से चला सकते हैं, मेरे पास उनमें से एक बड़ी विविधता है, जिसमें सरगम ​​शामिल है। और वास्तव में CIEDE2000 वास्तव में सबसे अच्छा है। DE2k में सुधारों में से एक त्वचा का रंग है, वे हमारे लिए अलग दिखते हैं, और बहुत सारे कार्यों के लिए अधिक मायने रखते हैं। मानक डीई उन्हें वास्तव में होना चाहिए की तुलना में अधिक भिन्न है। और खूबानी और नीली-पीली बहुत सुंदर लग रही है। godsnotwheregodsnot.blogspot.com/2012/09/…
ताताराइज़ करें

एकमात्र बड़ा सुधार जो मैं देख सकता था वह स्थिर सूचियों में होगा। अन्य सभी रंगों में से जो रंग सबसे महत्वपूर्ण है, उसे खोजना वास्तव में इष्टतम नहीं हो सकता है, यदि आपको केवल 20 रंगों की आवश्यकता है। यदि आप क्लस्टरिंग करते हैं तो आप बेहतर परिणाम प्राप्त करने में सक्षम हो सकते हैं और उन 20 रंगों को पाया जिनके लिए सेट में सभी रंगों के बीच रंग की दूरी अधिकतम होती है। यह वास्तव में ट्रैवलिंग सेल्समैन में बदल सकता है और ब्रूट फोर्सिंग (2 ^ 24) ^ 20 अत्यधिक महंगे रंग दूरी एल्गोरिथ्म के माध्यम से एक अच्छा समय ले सकता है। हालांकि, एक अच्छा क्लस्टरिंग एल्गोरिदम आपको जल्दी से एक अच्छा परिणाम दे सकता है।
ताताराइज़ करें

1
वास्तव में निरीक्षण करने पर मैंने इसे पोस्ट किए गए ग्राफ़िक में पिछले दो के लिए भी नहीं किया होगा। यह इसका निर्माण कर रहा था और हर बार एक नई छवि बना रहा था। लेकिन, उस समय यह मूल रूप से प्रत्येक नए रंग के लिए समय का एक ठोस लंबा खंड था। और एक पूरी समझ है कि वे बेतहाशा मददगार नहीं थे।
17

24

मैंने प्रक्रियात्मक रूप से नेत्रहीन अलग-अलग रंग बनाने के लिए एक पेज ऑनलाइन डाला है:
http://phrogz.net/css/distinct_colive.html

अन्य उत्तरों के विपरीत, जो आरजीबी या एचएसवी स्पेस में समान रूप से कदम रखते हैं (जहां अक्ष मूल्यों और अवधारणात्मक मतभेदों के बीच एक गैर-संबंध है ), मेरा पृष्ठ दो रंगों को रोकने के लिए मानक CMI (I: c) रंग दूरी एल्गोरिथ्म का उपयोग करता है। दृष्टिगत रूप से पास।

पृष्ठ का अंतिम टैब आपको कई तरीकों से मानों को क्रमबद्ध करने की अनुमति देता है, और फिर उन्हें इंटरलेव (आदेश में फेरबदल) करता है ताकि आपको एक दूसरे के बगल में रखे गए बहुत अलग रंग मिलें।

इस लेखन के रूप में, यह केवल क्रोम और सफारी में अच्छी तरह से काम करता है, फ़ायरफ़ॉक्स के लिए एक शिम के साथ; यह इंटरफ़ेस में एचटीएमएल 5 रेंज इनपुट स्लाइडर्स का उपयोग करता है, जो IE9 और फ़ायरफ़ॉक्स अभी तक मूल रूप से समर्थन नहीं करते हैं।


1
यह एक महान उपकरण, इसे बनाने के लिए धन्यवाद। मैंने इसका उपयोग 145 अलग-अलग रंगों को उत्पन्न करने के लिए किया और मैं आपके अलग-अलग रंगों के टूल द्वारा बनाए गए परिणामों से बहुत प्रसन्न हूं।
मैलाची

विचार अच्छा लगता है, लेकिन मुझे समझ नहीं आता कि इंटरफ़ेस कैसे काम करता है। कहो कि मैं L a b स्पेस में 64 रंगों के अंतर को उत्पन्न करना चाहता हूं , मुझे किस सेटिंग का उपयोग करना चाहिए? मैं 50 से अधिक रंग प्राप्त नहीं कर सकता।
WIP

1
@wil लैब पेज पर डिफ़ॉल्ट सेटिंग्स आपको 480 रंगों से शुरू करने के लिए है। जब आप परिष्कृत टैब पर जाते हैं, तो अधिक या कम नमूने देखने के लिए दहलीज को समायोजित करें।
फ्रॉग्ज

36 रंगों के साथ मुझे अभी भी कई समान रंग मिलते हैं।
निमो

8

मुझे लगता है कि एचएसवी (या एचएसएल) स्पेस के यहां अधिक अवसर हैं। यदि आप अतिरिक्त रूपांतरण को बुरा नहीं मानते हैं, तो केवल ह्यू मान को घुमाकर सभी रंगों से गुजरना बहुत आसान है। यदि यह पर्याप्त नहीं है, तो आप संतृप्ति / मूल्य / लपट मूल्यों को बदल सकते हैं और फिर से रोटेशन से गुजर सकते हैं। या, आप हमेशा ह्यू मानों को स्थानांतरित कर सकते हैं या अपने "स्टेपिंग" कोण को बदल सकते हैं और अधिक बार घुमा सकते हैं।


2
ध्यान दें, हालांकि, कि समान रूप से समान रूप से कदम रखने से उप-आदर्श अवधारणात्मक पृथक्करण उत्पन्न होता है।
फोग्ज़

4

पिछले RGB समाधानों में एक दोष है। वे पूरे रंग स्थान का लाभ नहीं उठाते क्योंकि वे चैनलों के लिए एक रंग मान और 0 का उपयोग करते हैं:

#006600
#330000
#FF00FF

इसके बजाय उन्हें मिश्रित रंगों को उत्पन्न करने के लिए सभी संभावित रंग मानों का उपयोग करना चाहिए जो कि रंग चैनलों में 3 अलग-अलग मान हो सकते हैं:

#336600
#FF0066
#33FF66

पूर्ण रंग स्थान का उपयोग करके आप अधिक विशिष्ट रंग उत्पन्न कर सकते हैं। उदाहरण के लिए, यदि आपके पास प्रति चैनल 4 मान हैं, तो 4 * 4 * 4 = 64 रंग उत्पन्न किए जा सकते हैं। अन्य योजना के साथ, केवल 4 * 7 + 1 = 29 रंग उत्पन्न किए जा सकते हैं।

यदि आप N रंग चाहते हैं, तो प्रति चैनल आवश्यक मानों की संख्या है: Ceil (cube_root (N))

उसके बाद, आप संभावित (0-255 श्रेणी) मान (पायथन) निर्धारित कर सकते हैं:

max = 255
segs = int(num**(Decimal("1.0")/3))
step = int(max/segs)
p = [(i*step) for i in xrange(segs)]
values = [max]
values.extend(p)

फिर आप RGB रंगों पर पुनरावृति कर सकते हैं (यह अनुशंसित नहीं है):

total = 0
for red in values:
  for green in values:
    for blue in values:
      if total <= N:
        print color(red, green, blue)
      total += 1

नेस्टेड लूप काम करेंगे, लेकिन इसकी सिफारिश नहीं की जाती है क्योंकि यह ब्लू चैनल का पक्ष लेगा और परिणामस्वरूप रंगों में पर्याप्त लाल नहीं होगा (एन सबसे अधिक संभावना सभी संभावित रंग मूल्यों की संख्या से कम होगा)।

आप छोरों के लिए एक बेहतर एल्गोरिथ्म बना सकते हैं जहां प्रत्येक चैनल को समान रूप से व्यवहार किया जाता है और अधिक विशिष्ट रंग मान छोटे लोगों पर पसंदीदा होते हैं।

मेरे पास एक समाधान है, लेकिन इसे पोस्ट नहीं करना चाहता क्योंकि यह समझना या कुशल होना सबसे आसान नहीं है। लेकिन, आप समाधान देख सकते हैं यदि आप वास्तव में चाहते हैं।

यहाँ 64 उत्पन्न रंगों का एक नमूना है: 64 रंग


3

मुझे सरल रूप में, समान कार्यक्षमता की आवश्यकता थी।

एक बढ़ती हुई सूचकांक मूल्य से संभव के रूप में अद्वितीय रंगों के रूप में उत्पन्न करने के लिए मुझे क्या चाहिए था।

यहाँ कोड है, C # में (किसी भी अन्य भाषा का कार्यान्वयन बहुत समान होना चाहिए)

तंत्र बहुत सरल है

  1. Color_writers का एक पैटर्न 0 से 7 तक अनुक्रमित मूल्यों से उत्पन्न होता है।

  2. सूचकांकों <8 के लिए, वे रंग = color_writer [indexA] * 255 हैं।

  3. 8 और 15 के बीच सूचकांकों के लिए, वे रंग हैं = color_writer [indexA] * 255 + (color_writer [indexA + 1]) * 127

  4. 16 और 23 के बीच सूचकांकों के लिए, वे रंग हैं = color_writer [indexA] * 255 + (color_writer [indexA + 1]) * 127 + (color_writer [indexA + 2]) * 63

और इसी तरह:

रैंड कलर जेनरेटर

    private System.Drawing.Color GetRandColor(int index)
    {
        byte red = 0;
        byte green = 0;
        byte blue = 0;

        for (int t = 0; t <= index / 8; t++)
        {
            int index_a = (index+t) % 8;
            int index_b = index_a / 2;

            //Color writers, take on values of 0 and 1
            int color_red = index_a % 2;
            int color_blue = index_b % 2;
            int color_green = ((index_b + 1) % 3) % 2;

            int add = 255 / (t + 1);

            red = (byte)(red+color_red * add);
            green = (byte)(green + color_green * add);
            blue = (byte)(blue + color_blue * add);
        }

        Color color = Color.FromArgb(red, green, blue);
        return color;
    }

नोट: रंगों को देखने के लिए चमकीले और कठोर उत्पन्न करने से बचने के लिए (इस उदाहरण में: सफेद पृष्ठभूमि पर पीला) आप इसे पुनरावर्ती लूप के साथ संशोधित कर सकते हैं:

    int skip_index = 0;
    private System.Drawing.Color GetRandColor(int index)
    {
        index += skip_index;
        byte red = 0;
        byte green = 0;
        byte blue = 0;

        for (int t = 0; t <= index / 8; t++)
        {
            int index_a = (index+t) % 8;
            int index_b = index_a / 2;

            //Color writers, take on values of 0 and 1
            int color_red = index_a % 2;
            int color_blue = index_b % 2;
            int color_green = ((index_b + 1) % 3) % 2;

            int add = 255 / (t + 1);

            red = (byte)(red + color_red * add);
            green = (byte)(green + color_green * add);
            blue = (byte)(blue + color_blue * add);
        }

        if(red > 200 && green > 200)
        {
            skip_index++;
            return GetRandColor(index);
        }

        Color color = Color.FromArgb(red, green, blue);
        return color;
    }

1

मैं एक सेट चमक के साथ शुरू करूँगा 100% और प्राथमिक रंगों के आसपास पहले जाना:

FF0000, 00FF00, 0000FF

फिर संयोजन

FFFF00, FF00FF, 00FFFF

अगले उदाहरण के लिए चमक को आधा करें और एक ही चक्कर लगाएं। वास्तव में स्पष्ट रूप से अलग-अलग रंग नहीं हैं, इन के बाद मैं लाइन की चौड़ाई को अलग करना और बिंदीदार / धराशायी लाइनें आदि करना शुरू कर दूंगा।


1
विशेष रूप से रंगों के बजाय विभिन्न लाइन शैलियों का उपयोग करने के लिए उत्कृष्ट सुझाव के लिए +1।
इरिडीन

1

मैंने इस एल्गोरिथ्म को छोटे तरीके से लागू किया

void ColorValue::SetColorValue( double r, double g, double b, ColorType myType )
{
   this->c[0] = r;
   this->c[1] = g;
   this->c[2] = b;

   this->type = myType;
}


DistinctColorGenerator::DistinctColorGenerator()
{
   mFactor = 255;
   mColorsGenerated = 0;
   mpColorCycle = new ColorValue[6];
   mpColorCycle[0].SetColorValue( 1.0, 0.0, 0.0, TYPE_RGB);
   mpColorCycle[1].SetColorValue( 0.0, 1.0, 0.0, TYPE_RGB);
   mpColorCycle[2].SetColorValue( 0.0, 0.0, 1.0, TYPE_RGB);
   mpColorCycle[3].SetColorValue( 1.0, 1.0, 0.0, TYPE_RGB);
   mpColorCycle[4].SetColorValue( 1.0, 0.0, 1.0, TYPE_RGB);
   mpColorCycle[5].SetColorValue( 0.0, 1.0, 1.0, TYPE_RGB);
}

//----------------------------------------------------------

ColorValue DistinctColorGenerator::GenerateNewColor()
{
   int innerCycleNr = mColorsGenerated % 6;
   int outerCycleNr = mColorsGenerated / 6;
   int cycleSize = pow( 2, (int)(log((double)(outerCycleNr)) / log( 2.0 ) ) );
   int insideCycleCounter = outerCycleNr % cyclesize;

   if ( outerCycleNr == 0)
   {
      mFactor = 255;
   }
   else
   {
      mFactor = ( 256 / ( 2 * cycleSize ) ) + ( insideCycleCounter * ( 256 / cycleSize ) );
   }

   ColorValue newColor = mpColorCycle[innerCycleNr] * mFactor;

   mColorsGenerated++;
   return newColor;
}

0

आप रंग स्थान को 0 से 255 तक के तीन नंबरों के सभी संयोजनों के रूप में भी सोच सकते हैं। यह 0 और 255 ^ 3 के बीच एक संख्या का आधार -255 प्रतिनिधित्व है, तीन दशमलव स्थानों के लिए मजबूर किया जाता है (यदि आवश्यकता हो तो अंत में शून्य जोड़ें)।

तो रंगों की x संख्या उत्पन्न करने के लिए, आप x समान रूप से रिक्ति प्रतिशत, 0 से 100 की गणना करेंगे। उन प्रतिशत को 255 ^ 3 से गुणा करके संख्या प्राप्त करें, उन संख्याओं को आधार 255 में बदलें, और पहले बताए अनुसार शून्य जोड़ें।

आधार रूपांतरण एल्गोरिथ्म, संदर्भ के लिए (pseudocode में जो C # के काफी करीब है):

int num = (number to convert);
int baseConvert = (desired base, 255 in this case);
(array of ints) nums = new (array of ints);
int x = num;
double digits = Math.Log(num, baseConvert); //or ln(num) / ln(baseConvert)
int numDigits = (digits - Math.Ceiling(digits) == 0 ? (int)(digits + 1) : (int)Math.Ceiling(digits)); //go up one if it turns out even
for (int i = 0; i < numDigits; i++)
{
  int toAdd = ((int)Math.Floor(x / Math.Pow((double)convertBase, (double)(numDigits - i - 1))));
  //Formula for 0th digit: d = num / (convertBase^(numDigits - 1))
  //Then subtract (d * convertBase^(numDigits - 1)) from the num and continue
  nums.Add(toAdd);
  x -= toAdd * (int)Math.Pow((double)convertBase, (double)(numDigits - i - 1));
}
return nums;

यदि आप चाहते हैं, तो सफेद और काले होने से बचने के लिए, सीमा को थोड़ा सा लाने के लिए आपको कुछ करना पड़ सकता है। वे संख्या वास्तव में एक चिकनी रंग पैमाने नहीं हैं, लेकिन यदि आपके पास बहुत अधिक नहीं हैं तो वे अलग-अलग रंग उत्पन्न करेंगे।

यह प्रश्न .NET में आधार रूपांतरण पर अधिक है।


0

nth रंग पाने के लिए। बस इस तरह का कोड पर्याप्त होगा। यह मैं अपने opencv क्लस्टरिंग समस्या में उपयोग किया है। यह अलग-अलग रंग पैदा करेगा जैसे कि जलीय परिवर्तन।

for(int col=1;col<CLUSTER_COUNT+1;col++){
switch(col%6)
   {
   case 1:cout<<Scalar(0,0,(int)(255/(int)(col/6+1)))<<endl;break;
   case 2:cout<<Scalar(0,(int)(255/(int)(col/6+1)),0)<<endl;break;
    case 3:cout<<Scalar((int)(255/(int)(col/6+1)),0,0)<<endl;break;
    case 4:cout<<Scalar(0,(int)(255/(int)(col/6+1)),(int)(255/(int)(col/6+1)))<<endl;break;
    case 5:cout<<Scalar((int)(255/(int)(col/6+1)),0,(int)(255/(int)(col/6+1)))<<endl;break;
    case 0:cout<<Scalar((int)(255/(int)(col/6)),(int)(255/(int)(col/6)),0)<<endl;break;
   }
}

0

यदि किसी को C # में सफेद अग्रभूमि के लिए उच्च मध्यम रंग के लिए यादृच्छिक माध्यम उत्पन्न करने की आवश्यकता है, तो यहां कोड है।

[DllImport("shlwapi.dll")]
public static extern int ColorHLSToRGB(int H, int L, int S);

public static string GetRandomDarkColor()
{
    int h = 0, s = 0, l = 0;
    h = (RandomObject.Next(1, 2) % 2 == 0) ? RandomObject.Next(0, 180) : iApp.RandomObject.Next(181, 360);
    s = RandomObject.Next(90, 160);
    l = RandomObject.Next(80, 130);

    return System.Drawing.ColorTranslator.FromWin32(ColorHLSToRGB(h, l, s)).ToHex();
}

private static string ToHex(this System.Drawing.Color c)
{
    return "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
}

आप RandomObjectअपनी खुद की Randomक्लास ऑब्जेक्ट से बदल सकते हैं ।


-3

आप अपने 3 255 मूल्यों का एक यादृच्छिक सेट प्राप्त कर सकते हैं और इसे 3 मानों के अंतिम सेट के खिलाफ जांच सकते हैं, यह सुनिश्चित करते हुए कि वे उपयोग करने से पहले प्रत्येक पुराने मूल्यों से कम से कम X दूर हैं।

OLD: 190, 120, 100

नई: 180, 200, 30

यदि X = 20 है, तो नए सेट को फिर से बनाया जाएगा।


मैं गणित करने के लिए लगभग उत्सुक हूं और गणना करता हूं कि यह एल्गोरिदम एक अनंत लूप में जाने से पहले औसतन कितना समय होगा जब कोई और समाधान संभव नहीं है।
तांत्रिक करें

हम्म। जैसा कि पर्याप्त रूप से आपके उत्तर में कहा गया है कि कोई भी आर मूल्य भी अन्य आर मूल्य के करीब है पुनर्जनन का कारण होगा, यह 12 से कम है। हालांकि यह अजीब तरह से रंगों को लाल और नीला कहेगी, क्योंकि दोनों में 0 का हरा है जो 20 के भीतर है। मेरा मतलब है कि आपका उदाहरण शाब्दिक रूप से कहता है: colorcodehex.com/be7864 colorcodehex.com/b4c81e बहुत पास हैं और पुनर्जीवित होना चाहिए।
ताताराइज करें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.