Gibt es eine bessere Möglichkeit, mit C ++ eine 24 -Bit -Farbe im Terminal zu verwenden?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Gibt es eine bessere Möglichkeit, mit C ++ eine 24 -Bit -Farbe im Terminal zu verwenden?

by Anonymous » 09 Mar 2025, 10:36

Ich habe mit C ++ farbige Animationen im Terminal erstellt, aber mit der Leistungsabnahme, die ANSI mit sich bringt, angefangen. Ich möchte eine volle Farbe im Terminal haben und gleichzeitig eine anständige Menge an Geschwindigkeit beibehalten. Ich verwende derzeit _write , um an das Terminal zu schreiben. Ich vermute, dass ANSI die Wartezeiten erhöht, weil es die Raumnutzung erhöht hat: \ x1b [48; 2; 000; 000; 000m für einen Buchstaben mit vollständig unabhängigem RGB. Dies ist 20-mal teurer als einfach einen einzelnen Buchstaben an das Terminal zu schreiben.

Code: Select all

#include 
#include 
#include 
#include 

int main()
{
HANDLE consoleIn = GetStdHandle(STD_INPUT_HANDLE);
DWORD dwMode;
GetConsoleMode(consoleIn, &dwMode);
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(consoleIn, dwMode);
HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO screen;
GetConsoleScreenBufferInfo(console, &screen);
short columns = screen.srWindow.Right - screen.srWindow.Left + 1;
short rows = screen.srWindow.Bottom - screen.srWindow.Top + 1;
int newfd = dup(STDOUT_FILENO);
char buffer[columns * rows];
int i;
for (i = 0; i < columns * rows; i++)
{
buffer[i] = ' ';
}
int fileHandle = 0;
auto start = std::chrono::high_resolution_clock::now();
for (i = 0; i < 500; i++)
{
_write(newfd, buffer, sizeof(buffer));
}
auto finish = std::chrono::high_resolution_clock::now();
std::cout

Top