2012-03-01 12 views
11

मैं क्रमशः 50, 75, 90 जैसे विशिष्ट आरजीबी मान पर Win32 कंसोल एप्लिकेशन का फ़ॉन्ट रंग सेट करने का प्रयास कर रहा हूं। मैं पहले से ही SetConsoleTextAttribute() की कोशिश की है, लेकिन दुर्भाग्य से यह क्योंकि कमांड प्रॉम्प्ट गुण खिड़की आप विशिष्ट रंग सेट कर सकते हैं में, आर, जी, या बीआरजीबी विशिष्ट कंसोल टेक्स्ट रंग सी ++

यह संभव हो गया है के लिए 0 या 255 तक ही सीमित किया जा रहा है, जैसे इतना

http://www.yourgamercard.net/screen/i/4a8c57.png

मैं काफ़ी खोज की है लेकिन ऐसा लगता है कि केवल जवाब SetConsoleTextAttribute() है।

+0

लाल, हरे और नीले रंग के रंग वास्तव में 0 से 255 रेंज के भीतर हैं। कोई भी रंग 3 आठ बिट्स का संयोजन है। यह भी देखें - http://service.real.com/help/library/guides/realone/ProductionGuide/HTML/htmfiles/colors.htm –

+4

क्या आपने मेरा प्रश्न भी पढ़ा? –

+0

बेशक। यह बिल्कुल स्पष्ट नहीं है कि आपकी समस्या वास्तव में क्या है। आपको बिटमैस्क मिला, आपको एक फ़ंक्शन मिला - इसे कॉल करें और अपने कंसोल को रंगों से भरा बनाएं। –

उत्तर

15

इसे सेट करने के लिए आपको SetConsoleScreenBufferInfoEx का उपयोग करने की आवश्यकता है, CONSOLE_SCREEN_BUFFER_INFOEX संरचना की रंगीन प्रविष्टि देखें।

कंसोल रंग दो-स्तर की प्रक्रिया हैं: कंसोल विशेषता है, जिसमें फोरग्राउंड और पृष्ठभूमि (लाल, हरा, नीला और तीव्रता) के लिए चार बिट्स हैं, जो कि मूल प्राथमिक और माध्यमिक रंगों के रंगों को सीमित करते हैं । लेकिन वास्तविक मान मान निर्धारित करने के लिए इन मानों को रंग तालिका में सूचकांक के रूप में उपयोग किया जाता है। तो भौतिक लाल रंग की बजाय चरित्र विशेषता 'रंग' बिट्स के रूप में "तार्किक लाल" आदि के बारे में सोचें। (वैल्यू एट्रिब्यूट 'रेड' मैप्स का मान वास्तव में डिफ़ॉल्ट रूप से आरजीबी लाल है, लेकिन ऐसा नहीं होना चाहिए।) तो आप हमेशा 16 अनुक्रमित रंग तक सीमित रहते हैं; लेकिन आप उन रंगों को सेट कर सकते हैं जो 16 रंग-आरजीबी रंगों को आप रंगीन के माध्यम से चाहते हैं।

उपरोक्त संवाद में दिखाई देने वाले रंगीन वर्गों की पट्टी अनिवार्य रूप से रंग तालिका है, और रंगों को उनके चरित्र विशेषता क्रम में सूचीबद्ध करती है, पहला शकर 'तार्किक काला' होता है, और इसी तरह।

+0

वाह, महान स्पष्टीकरण। इसके लिए धन्यवाद! आपने धमाल मचाया। –

0

तो पाठ पूरी तरह से आरजीबी है इसे बनाने के लिए एक तरीका होता है, लेकिन यह की आवश्यकता है 'SetPixel' यदि आप पाठ आप तो आरजीबी मूल्यों को बदल सकते की एक प्रतिकृति बनाने के लिए, यहाँ कुछ मैं एक के लिए बनाया है, यह है करना मुश्किल है, लेकिन मैं एक .h फ़ाइल बना रहा हूं, इसलिए हर कोई इसका उपयोग कर सकता है, यहां आप जा सकते हैं:

void PrintA(int R, int G, int B) 
{ 
    HWND myconsole = GetConsoleWindow(); 
    HDC mydc = GetDC(myconsole); 
    SetPixel(mydc, i + 0, i2 + 3, RGB(R, G, B)); 
    SetPixel(mydc, i + 0, i2 + 4, RGB(R, G, B)); 
    SetPixel(mydc, i + 0, i2 + 5, RGB(R, G, B)); 
    SetPixel(mydc, i + 0, i2 + 6, RGB(R, G, B)); 
    SetPixel(mydc, i + 0, i2 + 7, RGB(R, G, B)); 
    SetPixel(mydc, i + 0, i2 + 8, RGB(R, G, B)); 
    SetPixel(mydc, i + 0, i2 + 9, RGB(R, G, B)); 
    SetPixel(mydc, i + 1, i2 + 2, RGB(R, G, B)); 
    SetPixel(mydc, i + 1, i2 + 3, RGB(R, G, B)); 
    SetPixel(mydc, i + 1, i2 + 4, RGB(R, G, B)); 
    SetPixel(mydc, i + 1, i2 + 5, RGB(R, G, B)); 
    SetPixel(mydc, i + 1, i2 + 6, RGB(R, G, B)); 
    SetPixel(mydc, i + 1, i2 + 7, RGB(R, G, B)); 
    SetPixel(mydc, i + 1, i2 + 8, RGB(R, G, B)); 
    SetPixel(mydc, i + 1, i2 + 9, RGB(R, G, B)); 
    SetPixel(mydc, i + 2, i2 + 1, RGB(R, G, B)); 
    SetPixel(mydc, i + 2, i2 + 2, RGB(R, G, B)); 
    SetPixel(mydc, i + 2, i2 + 6, RGB(R, G, B)); 
    SetPixel(mydc, i + 3, i2 + 1, RGB(R, G, B)); 
    SetPixel(mydc, i + 3, i2 + 2, RGB(R, G, B)); 
    SetPixel(mydc, i + 3, i2 + 6, RGB(R, G, B)); 
    SetPixel(mydc, i + 4, i2 + 2, RGB(R, G, B)); 
    SetPixel(mydc, i + 4, i2 + 3, RGB(R, G, B)); 
    SetPixel(mydc, i + 4, i2 + 4, RGB(R, G, B)); 
    SetPixel(mydc, i + 4, i2 + 5, RGB(R, G, B)); 
    SetPixel(mydc, i + 4, i2 + 6, RGB(R, G, B)); 
    SetPixel(mydc, i + 4, i2 + 7, RGB(R, G, B)); 
    SetPixel(mydc, i + 4, i2 + 8, RGB(R, G, B)); 
    SetPixel(mydc, i + 4, i2 + 9, RGB(R, G, B)); 
    SetPixel(mydc, i + 5, i2 + 3, RGB(R, G, B)); 
    SetPixel(mydc, i + 5, i2 + 4, RGB(R, G, B)); 
    SetPixel(mydc, i + 5, i2 + 5, RGB(R, G, B)); 
    SetPixel(mydc, i + 5, i2 + 6, RGB(R, G, B)); 
    SetPixel(mydc, i + 5, i2 + 7, RGB(R, G, B)); 
    SetPixel(mydc, i + 5, i2 + 8, RGB(R, G, B)); 
    SetPixel(mydc, i + 5, i2 + 9, RGB(R, G, B)); 
    i += 8; 

    if (i/80 == 8) 
    { 
     i = 0; 
     i2 += 12; 
    } 
} 
संबंधित मुद्दे