كيف يمكنني إخراج ظلال مختلفة من الأخضر إلى المحطة؟

StackOverflow https://stackoverflow.com/questions/2814478

  •  26-09-2019
  •  | 
  •  

سؤال

أنا حاليًا أستخدم الكود التالي لإخراج النص باللون الأخضر إلى المحطة:

printf("%c[1;32mHello, world!\n", 27);

ومع ذلك ، أريد المزيد من ظلال الأخضر. ما هي أسهل طريقة لإنجاز هذا؟

هل كانت مفيدة؟

المحلول

يمكنك استعمال ال 256Colors2.pl السيناريو على روب ميرمان موقع للتأكد من أن المحطة الخاصة بك تتعامل مع 256 لونًا بشكل صحيح. ثم اختر المزيج الصحيح من قيم RGB ليمنحك الظل الصحيح للأخضر.

استنادًا إلى البرنامج النصي ، يبدو أن أرقام الألوان هي في الأساس إزاحة لنظام الألوان 6:

COLOR = r*6^2 + g*6 + b) + 16

وللون المقدمة ، نحتاج إلى استخدامه:

\x1b[38;5;${COLORNUM}m

ومرة أخرى بناءً على نصه ، إليك حلقة (بيرل) تعرض الحرف O باللون المطلوب:

# now the color values
for ($green = 0; $green < 6; $green++) {
    for ($red = 0; $red < 6; $red++) {
        for ($blue = 0; $blue < 6; $blue++) {
            $color = 16 + ($red * 36) + ($green * 6) + $blue;
            print "\\x1b[38;5;${color}m :\x1b[38;5;${color}m O\x1b[0m ";
            print "\n" if ($blue == 2 || $blue == 5);
        }
    }
    print "\n";
}

وهنا عينة من ناتجها:

Screenshot showing color value samples

ملاحظة: تشارلز يبدو أن الأمر أكثر قليلاً حول كيفية عمله بالفعل وما ستحتاج إلى القيام به للتحقق من أن القشرة تدعم القدرات المطلوبة. تعتمد معلوماتي بشكل صارم على الملاحظة والاختبار مع قذيفة معروفة لدعم 256 لونًا (Konsole).

نصائح أخرى

كيف تفعل هذا يعتمد على المحطة الخاصة بك. يجب أن تكون قادرًا على الاستعلام عن قاعدة بيانات TermCap أو terminfo لمعرفة كيف.

هذا أسهل في التظاهر مع البعض tput الأوامر.

على سبيل المثال على محطة بلدي الحالية:

tput initc 2 500 900 100
tput setaf 2

يعرّف اللون 2 ليكون ظلالًا من اللون الأخضر (المعلمات هي قيم RGB بين 0 و 1000) ويقوم بتبديل المقدمة إلى هذا اللون.

لرؤية تسلسل الأحرف المطلوب في أ C برنامج لمحطة المحطة المحددة الخاصة بك يمكنك عرض القدرات مع infocmp.

على سبيل المثال (لمحطة بلدي)

$ infocmp -1 | grep initc
        initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
$ infocmp -1 | grep setaf
        setaf=\E[38;5;%p1%dm,

ال % تنسيق paramter هو مؤلم قليلاً (موافق جدًا) لتحليله ولكنه موثق في infocmp صفحة الرجل. ترجمة هذا إلى printf سلسلة التنسيق ليست صعبة للغاية.

قد يساعدك هذا:

http://en.wikipedia.org/wiki/ansi_escape_code

يمكنك فقط الحصول على ظلال مختلفة من كل لون. حاول استبدال 1 مع 2 للحصول على أخضر داكن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top