代码之家  ›  专栏  ›  技术社区  ›  hymie

ncurses color\u content()给了我错误的值

  •  0
  • hymie  · 技术社区  · 8 年前

    我正在使用 xterm-256color . 以下是我的简短程序片段:

      mvwprintw(stdscr,1,1,"You have %d colors",COLORS);
      mvwprintw(stdscr,2,1,"You have %d color pairs",COLOR_PAIRS);
      wprintw(stdscr,"\n\n");
      for (i=1;i<10;i++)
      {
        short r,g,b;
        short thiscolor=i+70;
        init_pair(i,thiscolor,COLOR_BLACK);
        color_content(thiscolor,&r,&g,&b);
        wattron(stdscr,COLOR_PAIR(i));
        wprintw(stdscr,"This is color %d\t%d %d %d\n",thiscolor,r,g,b);
        wattroff(stdscr,COLOR_PAIR(i));
      }
      refresh();
    

    它可以打印出10种不同的绿色,但是 color_content 与正在打印的绿色不匹配:

     You have 256 colors
     You have 256 color pairs
    
    This is color 71        1000 1000 1000
    This is color 72        0 0 0
    This is color 73        1000 0 0
    This is color 74        0 1000 0
    This is color 75        1000 1000 0
    This is color 76        0 0 1000
    This is color 77        1000 0 1000
    This is color 78        0 1000 1000
    This is color 79        1000 1000 1000
    

    我希望中间值(G)总是一个相当高的数字。我会的 不 预计会出现0。

    我做错什么了吗?还是我误解了什么 color\u内容 是否应该输出?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Thomas Dickey    8 年前

    ncurses对 调色板 由给定的终端仿真器使用。除非初始化颜色( init_color ),它只有内置表。没有便携式方法来确定终端的调色板。

    上的部分 start_color 手册上说

    • 如果终端支持 initc (initialize\u color)功能, start\u颜色 初始化其表示红色的内部表, 调色板的绿色和蓝色组件。

      组件取决于终端是否使用CGA(也称为“ANSI”) 或HLS(即HLS(色调亮度饱和度)能力 设置)。表格首先初始化为八种基本颜色 (黑色、红色、绿色、黄色、蓝色、品红、青色和白色),以及 之后(如果终端支持八种以上的颜色),则 组件为 初始化为1000 .

      start\u颜色 不尝试将终端的调色板设置为 匹配其内置表。 应用程序可以使用 初始颜色 更改内部表格以及终端的颜色。

    “初始化为1000”可能更清楚。库使用8种ANSI颜色中的红色/绿色/蓝色图案作为在前8种颜色之后重复的内容(使用1000表示非零值)(请参见 source-code ...).

    这就是 违约 ,内置于库中。如果你想要不同的东西,你必须用 init_color . 这个 ncurses-examples 有一些程序(ncurses、picsmap、savescreen)可以使用的示例调色板数据文件来实现这一点。