विंडोज 7 टास्कबार "रंग हॉट-ट्रैकिंग" के लिए उपयोग करने के लिए रंग की गणना कैसे करता है?


20

इसने मुझे काफी समय से परेशान किया है।

क्या किसी को पता है कि एल्गोरिथ्म विंडोज 7 एयरो वर्तमान में चल रहे ऐप्स के लिए टास्कबार बटन पर हॉट-ट्रैकिंग होवर हाइलाइट के रूप में उपयोग करने के लिए रंग का निर्धारण करता है?

विंडोज 7 टास्कबार होवर रंग

यह निश्चित रूप से ऐप के आइकन पर आधारित है, लेकिन मैं इसका विशिष्ट पैटर्न नहीं देख सकता कि यह कहां से रंग मूल्य प्राप्त कर रहा है।

यह निम्नलिखित में से कोई भी नहीं लगता है:

  1. पूरे आइकन से एक औसत रंग मूल्य, अन्यथा आप क्रोम जैसे बहु-रंगीन आइकन के साथ हर समय भूरा हो जाएगा ।
  2. छवि में रंग का सबसे अधिक उपयोग किया गया है, अन्यथा आप SQL सर्वर प्रबंधन स्टूडियो आइकन (बाएं से 6 वें) के लिए पीले हो जाएंगे। साथ ही, क्रोम आइकन समान माप में लाल, हरे और पीले रंग का उपयोग करता है।
  3. कुछ पिक्सेल पर स्थित रंग आइकन के भीतर समन्वय करता है, क्योंकि क्रोम लाल है - आइकन के शीर्ष को इंगित करता है - और नोटपैड ++ (दाईं ओर से दूसरा) हरा है - आइकन के नीचे का संकेत देता है।

मैंने ux.stackoverflow.com पर यह सवाल पूछा और यह ऑफ-टॉपिक के रूप में बंद हो गया, लेकिन किसी ने निम्नलिखित के साथ उत्तर दिया:


इस MSDN ब्लॉग लेख में रेमंड चेन द्वारा वर्णित के रूप में :

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


हालाँकि मैं वास्तव में उस जवाब से संतुष्ट नहीं था क्योंकि यह नहीं बताता है कि "प्रमुख" रंग की गणना कैसे की जाती है। SQL प्रबंधन स्टूडियो आइकन पर, निश्चित रूप से, मेरी आंखों के लिए, मुख्य रंग पीला है। फिर भी हाइलाइट हरे रंग की है। मैं जानना चाहता हूं, विशेष रूप से, एल्गोरिथ्म क्या है।


An average colour value from the entire icon, otherwise you would get brown all the time.इसका कोई मतलब नहीं है। उदाहरण के लिए, स्काइप , कमांड-प्रॉम्प्ट , या icons टोरेंट आइकन औसत रूप से भूरे रंग के कैसे होंगे? ಠ_ ered (पिछली बार जब मैंने विंडोज के कलर-कैलकुलेशन एल्गोरिदम में से एक को रिवर्स-इंजीनियर किया था, तो इसे खत्म करने के लिए कई वर्षों का ध्यान और अलग-अलग तरह का काम करना पड़ा। कुछ बिंदु पर एक।)
सिंटेक

@Synetech आप सही कह रहे हैं - मैं केवल उपलब्ध आइकन के विस्तृत सरणी के बारे में सोच रहा था और उनमें से कई जिनमें कई रंग हैं। उदाहरण के लिए क्रोम आइकन या IIS आइकन में क्रमशः लाल, हरे पीले और नीले और हरे, पीले और नीले रंग होते हैं। मुझे आलस आया कि ये औसत भूरे रंग के होंगे, लेकिन आप सही हैं कि यह बहुत अधिक या कम मोनोक्रोम आइकन पर लागू नहीं होता है।
थेटिमैन

ONT पोस्ट है एक टिप्पणी जो इस के लिए Chrome की संस्करण और के बारे में एक प्रश्न के लिंक लिंक किए गए पृष्ठ क्रोम स्रोत-कोड का परीक्षण करके यह बताते हैं। स्पष्टीकरण (कम से कम के लिए) बिल्कुल एक साधारण एल्गोरिथ्म नहीं है।
सिंटेक

@Synetech अच्छा लगता है - अब हम कहीं जा रहे हैं। यह उन पंक्तियों के साथ है जो मैं खोज रहा था। अब, यदि केवल हमें Win7 स्रोत कोड मिल सकता है ...;)
वेइटिमैन

मैं अनुमान लगा रहा हूं लेकिन, सभी पिक्सेल 3-आयामी स्थान (प्रत्येक रंग के लिए 1 मान) में हैं। उन्हें 10x10x10 के समूहों / क्यूब्स में विभाजित करें, इसलिए रंग आरजीबी (12,56,97) समूह / घन (10-20,50-60,90-100) में मिलता है। इन समूहों पर पिक्सेल को विभाजित करते समय आप उन पर नज़र रखते हैं जिनमें से सबसे बड़ा है। अंत में आप सबसे पिक्सल वाले समूह के औसत से प्रमुख रंग निर्धारित करते हैं। समूहों का आकार प्रदर्शन / सटीकता का व्यापार है।
mxt3

जवाबों:


14

से विंडोज 7 डेस्कटॉप में आपका स्वागत है में वास्तव में 35 मिनट पर:

यह 27 अलग-अलग बाल्टियों में एक सामान्य रंग का हिस्टोग्राम है, और हम अश्वेतों, गोरों, अल्फा चैनलों, और ग्रेस को निकालते हैं और सबसे प्रमुख RGBV [sic] मूल्य का उपयोग करते हैं ...

मैं काफी हद तक वक्ता "RGB" कहने का मतलब है, क्योंकि "RGBV" एक बात नहीं लगती। "सामान्यीकृत" भाग वास्तव में मायने नहीं रखता है; यह प्रभावी रूप से गिन रहा है कि प्रत्येक "बाल्टी" में कितने पिक्सेल हैं। इसलिए, प्रत्येक पिक्सेल को 27 बाल्टियों में से एक में रखा जाता है (एक त्रि-आयामी सरणी में व्यवस्थित किया जाता है; 27 का घनमूल 3 है) इसके प्रत्येक चैनल के मूल्य के आधार पर। विंडोज प्रत्येक रंग चैनल के लिए निर्धारित करता है कि क्या उस रंग की तीव्रता सीमा के नीचे, मध्य या शीर्ष भाग में है। ऐसा प्रतीत होता है कि रेंज लगभग 0-60, 60-200 और 200-255 हैं। पूरी तरह से पारदर्शी पिक्सेल बिल्कुल भी शामिल नहीं हैं।

विंडोज तब पाता है कि किस बाल्टी में सबसे अधिक पिक्सेल हैं, काले, सफेद और भूरे रंग की अनदेखी करते हैं (बाल्टी जहां तीनों चैनल एक ही रेंज में थे)। यह SQL सर्वर प्रबंधन स्टूडियो आइकन की व्याख्या करता है - जो हमें पीला दिखाई देता है वह वास्तव में "सफेद" बाल्टी में डंप हो जाता है और इसे नजरअंदाज कर दिया जाता है।

यदि किसी स्वीकार्य बाल्टी में कोई पिक्सेल नहीं हैं, तो प्रोग्राम को सिस्टम रंग योजना की परवाह किए बिना हल्का नीला ओवरले मिलता है। (कमांड प्रॉम्प्ट देखें।) यदि किसी प्रोग्राम का कोई आइकन नहीं है, तो उसे सफेद / पारभासी ओवरले मिलता है, भले ही विंडोज डिफ़ॉल्ट आइकन अन्यथा नीले या हरे रंग का ओवरले उत्पन्न करेगा।

एक ही हाइलाइट रंग होने से कई कार्यक्रमों को रोकने के लिए कुछ भी नहीं है। उदाहरण के लिए, नवीनतम क्रोम आइकन विंडोज 8 के एक्सप्लोरर के समान पीला है।

यदि संबंध हैं, तो एक पूर्वनिर्धारित आदेश है जो छवि में रंगों के क्रम पर निर्भर नहीं करता है। यह संभवत: सिर्फ उसी तरह का परिणाम है जिस तरह से अधिकतम पाया जाता है - पहले से जांच की जाने वाली बाल्टियां एक बाद में एक टाई होने पर भी अधिकतम बनी रहेंगी। ऐसा प्रतीत होता है कि पीले रंग की पहली बाल्टियों में से एक है।

एक बार जीतने वाली बाल्टी की खोज करने के बाद, हाइलाइट रंग बाल्टी की सीमा के बीच में कहीं एक रंग के लिए सेट किया गया लगता है।

परीक्षण मामले (प्रदान की गई संख्या आरजीबी मूल्य हैं):

चमकीला पीला(255, 247, 209) → डिफ़ॉल्ट हाइलाइट
लाल ४(47, 0, 0) → डिफ़ॉल्ट हाइलाइट
लाल ६०(60, 0, 0) → गहरा लाल
लाल ६६(66, 0, 0) → गहरा लाल
गहरा लाल(165, 0, 0) → लाल
ग्रे 128( 128, 128, 128) → डिफ़ॉल्ट हाइलाइट
halfs(0, 148, 255) और (255, 0, 0) → लाल
अधिक आधा(0, 255, 0) और (255, 216, 0) एक ही क्षेत्र के साथ → पीला
एक ही उलटसमान लेकिन फ़्लिप → पीला
सफेद लाल 180(255, 180, 180) → हल्का लाल
सफेद लाल 210(255, 210, 210) →
तिमाहियोंएक ही क्षेत्र के साथ शुद्ध नीला, शुद्ध पीला, शुद्ध लाल, और शुद्ध हरा रंग → पीला
सफेद लाल ६१(255, 61, 61) → लाल
लाल 82२(82) ०, ०) → गहरा लाल


यह अभी तक का सबसे अधिक जवाब है। धन्यवाद। यह सब कुछ बताती है जिससे मुझे परेशानी हुई और मैं भी गहराई में चला गया। वाहवाही।
वेइतिमान

@Bi NI जानते हैं कि यह एक गूंगा प्रश्न लगता है, लेकिन फिर भी। 27 बाल्टी क्यों? मुझे पता है कि यह 3 ^ 3 है, और मुझे लगता है कि पहले 3 आर, जी और बी रंग हैं, लेकिन दूसरा 3 क्या है?
anexl

@TheSexiestManinJamaica मुझे लगता है कि यह सिर्फ मनमाना है; शायद Microsoft को 3 ^ 3 का लालित्य पसंद आया। यह बहुत कम संभव रंग होने के बीच एक अच्छा संतुलन है (3 ^ 2 केवल 9 है) और बहुत सारे संभव रंग (3 ^ 4 81 है)।
बेन एन

0

मेरा अनुमान है कि प्रत्येक रंग के लिए, ऊपर से शुरू होने पर, आपको आर, जी और बी मान मिलते हैं, और उनमें से आप तीनों में से सबसे अधिक और सबसे कम लेते हैं और उनकी तुलना करते हैं। उच्चतम और निम्नतम के बीच सबसे बड़ा अंतर वाला रंग छवि में सबसे चमकीला रंग होगा। अब, क्रोम आइकन के मामले में, सबसे बड़े अंतर के लिए कई रंग बंधे हो सकते हैं, लेकिन लाल शीर्ष पर है, इसलिए यह पहले सामना किया गया है, और इस तरह उस छवि के लिए हावी है। (मुझे लगता है कि आप अपने खुद के आइकन को डिजाइन करके इसका परीक्षण कर सकते हैं, जैसे कि क्रोम लोगो को 120 डिग्री घुमाएं और देखें कि क्या इसके बजाय हरे या पीले हावी हैं।)


0

जिस तरह से मैं इसे समझता हूं - रंग निर्धारित करते समय ओएस कुछ कारकों से अधिक लेता है।

  1. क्या इस एप्लिकेशन के लिए OS द्वारा पहले से ही एक रंग सौंपा गया है? यदि हां, तो 7 पर जाएं।
  2. क्या इस रंग को प्रोग्राम कोड में परिभाषित किया गया है? यदि हां, तो कार्यक्रम से पूर्वनिर्धारित रंग का उपयोग करें। (हां, विंडोज़ प्रोग्राम के लिए एक वैरिएबल सेटिंग है जो इसे नियंत्रित करता है, नहीं, मुझे सटीक चर नाम नहीं पता है)
  3. अगर 1 = झूठा (मतलब कोई पूर्वनिर्धारित रंग नहीं), तो उपयोग किए गए आइकन के प्रमुख रंग को परिभाषित करें। (इसके लिए रंगों को काला, सफ़ेद और धूसर अनदेखा किया जाता है)
  4. यदि 2 उपयोग किए गए एक रंग को परिभाषित नहीं कर सकता है, और उपयोग किए गए अन्य रंगों की तुलना में अधिक प्रभावी है, तो आइकन के औसत आरबीजी मूल्य को परिभाषित करें। यदि एक परिभाषित रंग प्राप्त किया जाता है, तो इसका उपयोग करें। इस उद्देश्य के लिए, सफेद, काले, भूरे और भूरे रंग को पूरी तरह से अनदेखा किया गया है।
  5. यदि ब्लैकलिस्ट किए गए रंगों (ब्लैक व्हाइट या ग्रे) में से 3 में परिणाम होता है, तो बेतरतीब ढंग से एक रंग असाइन करें जो ब्लैक लिस्ट रंगों पर उल्लंघन किए बिना, औसत आरबीजी मूल्य का सबसे करीब से प्रतिनिधित्व करता है।
  6. रंग के सफल असाइनमेंट के पूरा होने पर, बाद में क्विक कलर असाइनमेंट के लिए रजिस्ट्री में रंग की जानकारी संग्रहीत करें।
  7. यदि सौंपा गया रंग वर्तमान में खुले हुए किसी अन्य अनुप्रयोग द्वारा पहले से उपयोग किए गए रंग से मेल खाता है, तो असाइन किए गए रंग के 15% के भीतर रंग को यादृच्छिक रंग राशि से ऑफसेट करें।
  8. रंग प्रदर्शित करें।

यह बहुत अच्छी तरह से गलत हो सकता है, और ज्यादातर अटकलें हैं, लेकिन, यह आपको समझने की एक आसान विधि देता है जो ओएस रंगों को निर्धारित करने के लिए बहुत अच्छी तरह से उपयोग कर सकता है। यह भी बताता है कि कैसे एक पूर्वनिर्धारित रंग के बिना एक कार्यक्रम, और एक आइकन जो समान मात्रा में रंगों का उपयोग कर रहा है, उसे सफेद / भूरा / काला नहीं सौंपा गया है, और क्यों काले, सफेद और ग्रे को कभी नहीं सौंपा गया है। इसके अलावा, आपको ध्यान देना चाहिए कि जिन प्रोग्रामों में आईकॉन नहीं है (कुछ अभी भी हैं) एक पारदर्शी हॉट-ट्रैकिंग कलर दिखाते हैं, जिसके कारण होवर ओवर होने पर आइकन को 'ब्राइट' कर देता है।


अनुप्रयोगों के लिए अपने स्वयं के रंग को परिभाषित करने का एक तरीका नहीं है। वहाँ भी एक ही रंग होने दो कार्यक्रमों के खिलाफ कोई नियम नहीं लगता है। दिलचस्प विचार, हालांकि।
बेन एन

-2

यहाँ कुछ VB कोड है जो एक छवि के RGB रंगों का औसत है:

Function AverageRGB(ByRef P As PictureBox) As Long

Dim Count As Long
Dim Red As Long
Dim Green As Long
Dim Blue As Long
Dim Hexed As String
Dim X As Long
Dim Y As Long
Count = 0


For X = 0 To P.Width Step P.Width \ 32


    For Y = 0 To P.Height Step P.Height \ 32
        Hexed = Right("00000" & Hex(P.Point(X, Y)), 6)
        Red = Red + CLng("&h" & Right(Hexed, 2))
        Green = Green + CLng("&h" & Mid(Hexed, 3, 2))
        Blue = Blue + CLng("&h" & Left(Hexed, 2))
        Count = Count + 1
    Next

Next

AverageRGB = RGB(Red \ Count, Green \ Count, Blue \ Count)
End Function

यह वास्तव में एक ओएस में उपयोग के लिए अनुकूलित नहीं है, लेकिन यह आपको एक मूल विचार देना चाहिए - स्रोत


3
उन्होंने पहले ही समझाया कि यह एक साधारण / बुनियादी औसत नहीं है। कोड के माध्यम से Chrome आइकन चलाएं और आप स्वयं ही उसे देख पाएंगे।
सिंटेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.