curses颜色操作

start_color,

init_pair,

init_color,

has_colors,

can_change_color,

color_content,

pair_content,

COLOR_PAIR

Synopsis

# include <curses.h>
int start_color(void);
int init_pair(short pair, short f, short b);
int init_color(short color, short r, short g, short b);
bool has_colors(void);
bool can_change_color(void);
int color_content(short color, short *r, short *g, short *b);
int pair_content(short pair, short *f, short *b);

概观

curses支持具有该功能的终端上的颜色属性。

要使用这些例程,必须在initscr之后调用start_color。

颜色总是成对使用(称为颜色对)。

颜色对由前景色(用于字符)和背景色(用于显示字符的空白字段)组成。

程序员使用例程init_pair初始化颜色对。

初始化之后,COLOR_PAIR(n)(在<curses.h>中定义的宏)可以用作新的视频属性。

如果终端能够重新定义颜色,程序员可以使用例程init_color来更改颜色的定义。

例程 has_colors和can_change_color返回TRUE或FALSE,具体取决于终端是否具有颜色功能以及程序员是否可以更改颜色。

例程color_content允许程序员以初始化颜色提取红色,绿色和蓝色分量。

例程pair_content允许程序员找出当前如何定义给定颜色对。

常规描述

该start_color程序不需要参数。

如果程序员想要使用颜色,并且在调用任何其他颜色操作例程之前,必须调用它。

在initscr之后立即调用此例程是一种好习惯。

start_color初始化八种基本颜色(黑色,红色,绿色,黄色,蓝色,洋红色,青色和白色)和两个全局变量COLORS和COLOR_PAIRS(分别定义终端可以支持的最大颜色数和颜色对)。

它还将终端上的颜色恢复为刚刚打开终端时的值。

所述init_pair例程改变颜色对的定义中。

它需要三个参数:要更改的颜色对的编号,前景颜色编号和背景颜色编号。

第一个参数的值必须介于1和COLOR_PAIRS-1之间,除非使用默认颜色,调整上限以允许在前景和/或背景中使用默认颜色的额外对。

第二个和第三个参数的值必须介于0和COLORS之间。

假设颜色对0在黑色上是白色的,但实际上是在初始化颜色之前终端实现的任何东西。

它不能被应用程序修改。

如果先前已初始化颜色对,则刷新屏幕并将所有出现的颜色对更改为新定义。

作为扩展,ncurses的允许用户通过所述设置的颜色对0 assume_default_colors例程,或指定使用的默认颜色(颜色数 -1)如果首先调用use_default_colors例程。

该init_color常规改变颜色的定义。

它需要四个参数:要更改的颜色数,后跟三个RGB值(红色,绿色和蓝色组件的数量)。

第一个参数的值必须介于0和COLORS之间。

最后三个参数中的每一个必须是介于0和1000之间的值。

使用init_color时,屏幕上所有出现的颜色都会立即更改为新定义。

该has_colors程序不需要参数。

如果终端可以操作颜色,则返回TRUE ; 否则,它返回FALSE。

该例程有助于编写与终端无关的程序。

例如,程序员可以使用它来决定是使用颜色还是其他视频属性。

该can_change_color程序不需要参数。

如果终端支持颜色并且可以更改其定义,则返回TRUE ; 另外,它返回FALSE。

该例程有助于编写与终端无关的程序。

该color_content例行为程序员提供了一种方法来找到一个颜色的红,绿,蓝(RGB)分量的强度。

它需要四个参数:颜色编号和short的三个地址,用于存储有关给定颜色中红色,绿色和蓝色分量的信息。

第一个参数的值必须介于0和COLORS之间。

存储在最后三个参数指向的地址处的值介于0(无组件)和1000(组件的最大数量)之间。

该pair_content程序允许程序员找出给定的颜色对包括什么颜色。

它需要三个参数:颜色对数,以及用于存储前景和背景颜色数的两个短地址。

第一个参数的值必须介于1和 COLOR_PAIRS-1之间。

存储在第二个和第三个参数指向的地址处的值介于0和COLORS之间。

颜色

在<curses.h>中定义了以下宏。这些是默认颜色。curses还假设COLOR_BLACK是所有终端的默认背景颜色。
COLOR_BLACK
COLOR_RED
COLOR_GREEN
COLOR_YELLOW
COLOR_BLUE
COLOR_MAGENTA
COLOR_CYAN
COLOR_WHITE

回报价值

例程can_change_color()和has_colors()返回TRUE或FALSE。

所有其他例程在失败时返回整数ERR,并且成功完成后,OK(SVr4仅指定“除ERR之外的整数值”)。

X / Open定义没有错误条件。

此实现将在尝试使用0到COLORS-1范围之外的颜色值时返回ERR(默认颜色扩展名除外),或使用0到COLOR_PAIR-1范围之外的颜色对。

init_color中使用的颜色值必须在0到1000的范围内。

如果终端尚未初始化,则会从所有函数返回错误。

如果未调用start_color,则会从init_pair等辅助函数返回错误。

init_color
如果终端不支持此功能,则返回错误,例如,如果终端描述中不存在initialize_color功能。

start_color
返回错误如果无法分配颜色表。

笔记

在ncurses实现中,每个屏幕都有一个单独的颜色激活标记,调色板,颜色对表以及相关的COLORS和COLOR_PAIRS计数; 该start_color功能只影响当前屏幕。

SVr4 / XSI接口并没有真正考虑到这一点,历史实现可能使用单个共享调色板。

请注意,通过颜色对设置隐式背景颜色仅影响字符写入操作明确触摸的字符单元格。

要更改通过擦除或滚动操作消除窗口部分时使用的背景颜色。

有关VGA兼容图形的386和486机器有几个注意事项:

COLOR_YELLOW实际上是棕色的。要变黄,请使用COLOR_YELLOW并结合A_BOLD属性。

理论上,A_BLINK属性应该使背景变亮。

这通常无法工作,甚至一些它主要工作的卡(如天堂和兼容机)在你试图设置明亮的“黄色”背景时会做错事(你会得到一个闪烁的黄色前景)。

颜色RGB值无法设置。

可移植性

此实现满足XSI Curses的COLORS和COLOR_PAIRS的最小最大值。

该init_pair例程接受前景色和背景色,支持的负值use_default_colors扩展名,但只有当程序被调用第一。

可以使用assume_default_colors扩展来修改COLOR_BLACK是所有终端的默认背景颜色的假设。

此实现检查指针,例如,color_content和pair_content返回的值,并在null时将它们视为可选参数。

curses颜色操作相关推荐

  1. OpenGL超级宝典笔记——累积缓冲区与其他颜色操作

    2019独角兽企业重金招聘Python工程师标准>>> 累积缓冲区 OpenGL除了颜色缓冲区.深度缓冲区.模板缓冲区之外,还有累积缓冲区.累积缓冲区允许你把渲染到颜色缓冲区的值,拷 ...

  2. PhotoShop彩色图片打印机只有四中颜色操作步骤:

    打印彩色图片打印机只有四中颜色操作步骤: 1.图片调成灰度模式: 2.建立色调分离模版选择4: 3.图片调整为CMYK模式: 4.调整魔棒工具: 5.用魔棒工具勾选第一个色调,建立新的图层-按住alt ...

  3. LabVIEW多列列表框背景颜色操作

    多列列表框 概述 在很多情况下我们需要在表格中某一列查找一些指定的元素,并且想让其显示为指定的颜色,此时就可以利用多列列表框的一些属性来解决这一问题. 知识点讲解 1. 在多列列表框中显示数据 1) ...

  4. 【C#学习】文本字体、颜色操作

    1.界面设计 <Window x:Class="A._5._2_舒亚鹏_1912080085.MainWindow"xmlns="http://schemas.mi ...

  5. CSS颜色操作案例Demo【彩色标记笔】

    案例代码: Html代码 <!DOCTYPE html> <html lang="en"><head><meta charset=&quo ...

  6. Android 颜色操作(对比、混合)

    GitHub源码 1. 颜色对比 /** Calculates the constrast between two colors, using the algorithm provided by th ...

  7. Unix/Linux下的Curses库开发指南——第二章 curses库I/O处理

    第2章 curses库I/O处理 2.1 curses库简介 curses库是curses开发包中最重要的一个库,其中提供了一些基本的屏幕操作函数,包括输入/输出,屏幕初始化,屏幕处理中断以及窗口的创 ...

  8. Unix/Linux下的Curses库开发指南——第一章 Curses库开发简介

    1.1什么是curses curses实际上是一个函数开发包,专门用来进行UNIX下终端环境下的屏幕界面处理以及I/O处理.通过这些函数库,C和C++程序就可以控制终端的视频显示以及输入输出.使用cu ...

  9. linux下curses的用法

    转载: https://www.cnblogs.com/dandingyy/archive/2012/08/23/2651644.html 1.术语概念 curses工作在屏幕,窗口和子窗口之上.屏幕 ...

最新文章

  1. service数据保存_「数据架构」数据流程图与实例-客户服务系统
  2. 类选择器选择非唯一属性无法精确取值的问题
  3. 无法创建 SSIS 运行时对象。请验证 DTS.dll 是否可用及是否已注册。此向导无法继续而将终止。 (SQL
  4. Baidu_Location_SDK
  5. maven中tomcat7-maven-plugin插件的使用
  6. 装饰者模式(Decorator)
  7. java clone concurrentlinkedqueue_java – ConcurrentLinkedQueue代码解释
  8. jni直接转byte_JNI jbyteArray转char*
  9. hadoop2.6.0的eclipse插件编译和设置
  10. 代理猎手(Proxy Hunter)教程(详细图文)
  11. 烽火HG680-MC_TTL免费升级固件及教程
  12. 二进制炸弹——拆弹实验
  13. HRSaaS系统和ERP系统有什么区别?
  14. 怎么把wps转换成word
  15. ews java 新建邮箱_通过EWS发送电子邮件时使用自定义显示名称
  16. P4848 崂山白花蛇草水
  17. 重装mysql_重装MySQL步骤详解
  18. 大鹏教育视频下载(手动操作)
  19. 经验分享:Python3离线安装及库更新
  20. 3,C# 物联网温度采集系统开发,STC51,DS18B20 温度采集上位机C# 的开发,与51程序的开发(三)

热门文章

  1. SpringMVC+RestFul详细示例实战教程
  2. 第二阶段 站立会议 02
  3. mysql 创建定时器
  4. eclipse @ 注释为何一写就报错
  5. 在ubuntu上mysql出现ERROR 1045(28000):Access denied for user ‘young‘@’localhost‘(using password:NO)...
  6. 在控制台读取用户输入密码,你会么?
  7. html模块化标签,jq load()方法实现html 模块化。
  8. ajax、jsonp简单封装
  9. Java黑皮书课后题第4章:*4.14(转换字母等级为数字)编写程序,提示用户输入一个字母等级A、B、C、D或者F,显示对应的数字值4、3、2、1或者0。对其它输入,提示非法等级
  10. ionic入门教程第十六课-在微信中使用ionic的解决方案(按需加载加强版)