一、绘图及时间函数
没看过前面的最好从第一期开始看。
基本绘图函数:DEV-C++ ege.h库 绘图教程(一)
高级绘图函数(上):DEV-C++ ege.h库 绘图教程(二)
高级绘图函数(下)&时间函数:DEV-C++ ege.h库 绘图教程(三)
二、颜色及其表示函数
1.ege库中颜色表示方法
设置绘图色有以下几种方法:
1.用十六进制颜色码的颜色表示。
(注:以#开头的世界六进制颜色码是通用表达形式,在C++中需要以 0x 开头的十六进制数来代替)
形式为:
颜色类型 | 十六进制颜色码 | 在 ege 对应的十六进制数值 |
---|---|---|
RGB 颜色 | #RGB | 0xFFRRGGBB |
RGB 颜色 | #RRGGBB | 0xFFRRGGBB |
ARGB 颜色 | #AARRGGBB | 0xAARRGGBB |
颜色 | 十六进制数值 | 说明 |
---|---|---|
RGB | 0xFFRRGGBB | RR = 红,GG = 绿,BB = 蓝 |
ARGB | 0xAARRGGBB | AA = 透明度,RR = 红,GG = 绿,BB = 蓝 |
如果一些绘图函数使用的是ARGB颜色,则透明度不能为0,否则看不到绘制图形。
2. 用 EGERGB(), EGEARGB() 宏合成颜色。
宏 | 对应的十六进制形式 | 说明 |
---|---|---|
EGERGB(RR, GG, BB) | 0xFFRRGGBB | RR = 红,GG = 绿,BB = 蓝 |
EGEARGB(AA, RR, GG, BB) | 0xAARRGGBB | AA = 透明度,RR = 红,GG = 绿,BB = 蓝 |
3. 用 hsl2rgb、hsv2rgb 转换其他色彩模型到 RGB 颜色。
4. 用预定义颜色,如下:
ege20.08 及之前的版本
常量 | 值 | 颜色 | 常量 | 值 | 颜色 |
---|---|---|---|---|---|
BLACK | EGERGB(0x00, 0x00, 0x00) | 黑 | DARKGRAY | EGERGB(0x54, 0x54, 0x54) | 深灰 |
BLUE | EGERGB(0x00, 0x00, 0xA8) | 蓝 | LIGHTBLUE | EGERGB(0x54, 0x54, 0xFC) | 亮蓝 |
GREEN | EGERGB(0x00, 0xA8 ,0x00) | 绿 | LIGHTGREEN | EGERGB(0x54, 0xFC, 0x54) | 亮绿 |
CYAN | EGERGB(0x00, 0xA8, 0xA8) | 青 | LIGHTCYAN | EGERGB(0x54, 0xFC, 0xFC) | 亮青 |
RED | EGERGB(0xA8, 0x00, 0x00) | 红 | LIGHTRED | EGERGB(0xFC, 0x54, 0x54) | 亮红 |
MAGENTA | EGERGB(0xA8, 0x00, 0xA8) | 紫 | LIGHTMAGENTA | EGERGB(0xFC, 0x54, 0xFC) | 亮紫 |
BROWN | EGERGB(0xA8, 0xA8, 0x00) | 棕 | YELLOW | EGERGB(0xFC, 0xFC, 0x54) | 黄 |
LIGHTGRAY | EGERGB(0xA8, 0xA8, 0xA8) | 浅灰 | WHITE | EGERGB(0xFC, 0xFC, 0xFC) | 白 |
ege dev 版本
常量 | 值 | 颜色 |
---|---|---|
ALICEBLUE | EGERGB(0xF0, 0xF8, 0xFF) | |
ANTIQUEWHITE | EGERGB(0xFA, 0xEB, 0xD7) | |
AQUA | EGERGB(0x00, 0xFF, 0xFF) | |
AQUAMARINE | EGERGB(0x7F, 0xFF, 0xD4) | |
AZURE | EGERGB(0xF0, 0xFF, 0xFF) | |
BEIGE | EGERGB(0xF5, 0xF5, 0xDC) | |
BEIGE | EGERGB(0xF5, 0xF5, 0xDC) | |
BISQUE | EGERGB(0xFF, 0xE4, 0xC4) | |
BLACK | EGERGB(0x00, 0x00, 0x00) | |
BLANCHEDALMOND | EGERGB(0xFF, 0xEB, 0xCD) | |
BLUE | EGERGB(0x00, 0x00, 0xFF) | |
BLUEVIOLET | EGERGB(0x8A, 0x2B, 0xE2) | |
BROWN | EGERGB(0xA5, 0x2A, 0x2A) | |
BURLYWOOD | EGERGB(0xDE, 0xB8, 0x87) | |
CADETBLUE | EGERGB(0x5F, 0x9E, 0xA0) | |
CHARTREUSE | EGERGB(0x7F, 0xFF, 0x00) | |
CHOCOLATE | EGERGB(0xD2, 0x69, 0x1E) | |
CORAL | EGERGB(0xFF, 0x7F, 0x50) | |
CORNFLOWERBLUE | EGERGB(0x64, 0x95, 0xED) | |
CORNSILK | EGERGB(0xFF, 0xF8, 0xDC) | |
CRIMSON | EGERGB(0xDC, 0x14, 0x3C) | |
CYAN | EGERGB(0x00, 0xFF, 0xFF) | |
DARKBLUE | EGERGB(0x00, 0x00, 0x8B) | |
DARKCYAN | EGERGB(0x00, 0x8B, 0x8B) | |
DARKGOLDENROD | EGERGB(0xB8, 0x86, 0x0B) | |
DARKGRAY | EGERGB(0xA9, 0xA9, 0xA9) | |
DARKGREEN | EGERGB(0x00, 0x64, 0x00) | |
DARKKHAKI | EGERGB(0xBD, 0xB7, 0x6B) | |
DARKMAGENTA | EGERGB(0x8B, 0x00, 0x8B) | |
DARKOLIVEGREEN | EGERGB(0x55, 0x6B, 0x2F) | |
DARKORANGE | EGERGB(0xFF, 0x8C, 0x00) | |
DARKORCHID | EGERGB(0x99, 0x32, 0xCC) | |
DARKRED | EGERGB(0x8B, 0x00, 0x00) | |
DARKSALMON | EGERGB(0xE9, 0x96, 0x7A) | |
DARKSEAGREEN | EGERGB(0x8F, 0xBC, 0x8F) | |
DARKSLATEBLUE | EGERGB(0x48, 0x3D, 0x8B) | |
DARKSLATEGRAY | EGERGB(0x2F, 0x4F, 0x4F) | |
DARKTURQUOISE | EGERGB(0x00, 0xCE, 0xD1) | |
DARKVIOLET | EGERGB(0x94, 0x00, 0xD3) | |
DEEPPINK | EGERGB(0xFF, 0x14, 0x93) | |
DEEPSKYBLUE | EGERGB(0x00, 0xBF, 0xFF) | |
DIMGRAY | EGERGB(0x69, 0x69, 0x69) | |
DODGERBLUE | EGERGB(0x1E, 0x90, 0xFF) | |
FIREBRICK | EGERGB(0xB2, 0x22, 0x22) | |
FLORALWHITE | EGERGB(0xFF, 0xFA, 0xF0) | |
FORESTGREEN | EGERGB(0x22, 0x8B, 0x22) | |
FUCHSIA | EGERGB(0xFF, 0x00, 0xFF) | |
GAINSBORO | EGERGB(0xDC, 0xDC, 0xDC) | |
GHOSTWHITE | EGERGB(0xF8, 0xF8, 0xFF) | |
GOLD | EGERGB(0xFF, 0xD7, 0x00) | |
GOLDENROD | EGERGB(0xDA, 0xA5, 0x20) | |
GRAY | EGERGB(0x80, 0x80, 0x80) | |
GREEN | EGERGB(0x00, 0x80, 0x00) | |
GREENYELLOW | EGERGB(0xAD, 0xFF, 0x2F) | |
HONEYDEW | EGERGB(0xF0, 0xFF, 0xF0) | |
HOTPINK | EGERGB(0xFF, 0x69, 0xB4) | |
INDIANRED | EGERGB(0xCD, 0x5C, 0x5C) | |
INDIGO | EGERGB(0x4B, 0x00, 0x82) | |
IVORY | EGERGB(0xFF, 0xFF, 0xF0) | |
KHAKI | EGERGB(0xF0, 0xE6, 0x8C) | |
LAVENDER | EGERGB(0xE6, 0xE6, 0xFA) | |
LAVENDERBLUSH | EGERGB(0xFF, 0xF0, 0xF5) | |
LAWNGREEN | EGERGB(0x7C, 0xFC, 0x00) | |
LEMONCHIFFON | EGERGB(0xFF, 0xFA, 0xCD) | |
LIGHTBLUE | EGERGB(0xAD, 0xD8, 0xE6) | |
LIGHTCORAL | EGERGB(0xF0, 0x80, 0x80) | |
LIGHTCYAN | EGERGB(0xE0, 0xFF, 0xFF) | |
LIGHTGOLDENRODYELLOW | EGERGB(0xFA, 0xFA, 0xD2) | |
LIGHTGRAY | EGERGB(0xD3, 0xD3, 0xD3) | |
LIGHTGREEN | EGERGB(0x90, 0xEE, 0x90) | |
LIGHTPINK | EGERGB(0xFF, 0xB6, 0xC1) | |
LIGHTSALMON | EGERGB(0xFF, 0xA0, 0x7A) | |
LIGHTSEAGREEN | EGERGB(0x20, 0xB2, 0xAA) | |
LIGHTSKYBLUE | EGERGB(0x87, 0xCE, 0xFA) | |
LIGHTSLATEGRAY | EGERGB(0x77, 0x88, 0x99) | |
LIGHTSTEELBLUE | EGERGB(0xB0, 0xC4, 0xDE) | |
LIGHTYELLOW | EGERGB(0xFF, 0xFF, 0xE0) | |
LIGHTRED | EGERGB(0xFC, 0x54, 0x54) | |
LIGHTMAGENTA | EGERGB(0xFC, 0x54, 0xFC) | |
LIME | EGERGB(0x00, 0xFF, 0x00) | |
LIMEGREEN | EGERGB(0x32, 0xCD, 0x32) | |
LINEN | EGERGB(0xFA, 0xF0, 0xE6) | |
MAGENTA | EGERGB(0xFF, 0x00, 0xFF) | |
MAROON | EGERGB(0x80, 0x00, 0x00) | |
MEDIUMAQUAMARINE | EGERGB(0x66, 0xCD, 0xAA) | |
MEDIUMBLUE | EGERGB(0x00, 0x00, 0xCD) | |
MEDIUMORCHID | EGERGB(0xBA, 0x55, 0xD3) | |
MEDIUMPURPLE | EGERGB(0x93, 0x70, 0xDB) | |
MEDIUMSEAGREEN | EGERGB(0x3C, 0xB3, 0x71) | |
MEDIUMSLATEBLUE | EGERGB(0x7B, 0x68, 0xEE) | |
MEDIUMSPRINGGREEN | EGERGB(0x00, 0xFA, 0x9A) | |
MEDIUMTURQUOISE | EGERGB(0x48, 0xD1, 0xCC) | |
MEDIUMVIOLETRED | EGERGB(0xC7, 0x15, 0x85) | |
MIDNIGHTBLUE | EGERGB(0x19, 0x19, 0x70) | |
MINTCREAM | EGERGB(0xF5, 0xFF, 0xFA) | |
MISTYROSE | EGERGB(0xFF, 0xE4, 0xE1) | |
MOCCASIN | EGERGB(0xFF, 0xE4, 0xB5) | |
NAVAJOWHITE | EGERGB(0xFF, 0xDE, 0xAD) | |
NAVY | EGERGB(0x00, 0x00, 0x80) | |
OLDLACE | EGERGB(0xFD, 0xF5, 0xE6) | |
OLIVE | EGERGB(0x80, 0x80, 0x00) | |
OLIVEDRAB | EGERGB(0x6B, 0x8E, 0x23) | |
ORANGE | EGERGB(0xFF, 0xA5, 0x00) | |
ORANGERED | EGERGB(0xFF, 0x45, 0x00) | |
ORCHID | EGERGB(0xDA, 0x70, 0xD6) | |
PALEGOLDENROD | EGERGB(0xEE, 0xE8, 0xAA) | |
PALEGREEN | EGERGB(0x98, 0xFB, 0x98) | |
PALETURQUOISE | EGERGB(0xAF, 0xEE, 0xEE) | |
PALEVIOLETRED | EGERGB(0xDB, 0x70, 0x93) | |
PAPAYAWHIP | EGERGB(0xFF, 0xEF, 0xD5) | |
PEACHPUFF | EGERGB(0xFF, 0xDA, 0xB9) | |
PERU | EGERGB(0xCD, 0x85, 0x3F) | |
PINK | EGERGB(0xFF, 0xC0, 0xCB) | |
PLUM | EGERGB(0xDD, 0xA0, 0xDD) | |
POWDERBLUE | EGERGB(0xB0, 0xE0, 0xE6) | |
PURPLE | EGERGB(0x80, 0x00, 0x80) | |
RED | EGERGB(0xFF, 0x00, 0x00) | |
ROSYBROWN | EGERGB(0xBC, 0x8F, 0x8F) | |
ROYALBLUE | EGERGB(0x41, 0x69, 0xE1) | |
SADDLEBROWN | EGERGB(0x8B, 0x45, 0x13) | |
SALMON | EGERGB(0xFA, 0x80, 0x72) | |
SANDYBROWN | EGERGB(0xF4, 0xA4, 0x60) | |
SEAGREEN | EGERGB(0x2E, 0x8B, 0x57) | |
SEASHELL | EGERGB(0xFF, 0xF5, 0xEE) | |
SIENNA | EGERGB(0xA0, 0x52, 0x2D) | |
SILVER | EGERGB(0xC0, 0xC0, 0xC0) | |
SKYBLUE | EGERGB(0x87, 0xCE, 0xEB) | |
SLATEBLUE | EGERGB(0x6A, 0x5A, 0xCD) | |
SLATEGRAY | EGERGB(0x70, 0x80, 0x90) | |
SNOW | EGERGB(0xFF, 0xFA, 0xFA) | |
SPRINGGREEN | EGERGB(0x00, 0xFF, 0x7F) | |
STEELBLUE | EGERGB(0x46, 0x82, 0xB4) | |
TAN | EGERGB(0xD2, 0xB4, 0x8C) | |
TEAL | EGERGB(0x00, 0x80, 0x80) | |
THISTLE | EGERGB(0xD8, 0xBF, 0xD8) | |
TOMATO | EGERGB(0xFF, 0x63, 0x47) | |
TURQUOISE | EGERGB(0x40, 0xE0, 0xD0) | |
VIOLET | EGERGB(0xEE, 0x82, 0xEE) | |
WHEAT | EGERGB(0xF5, 0xDE, 0xB3) | |
WHITE | EGERGB(0xFF, 0xFF, 0xFF) | |
WHITESMOKE | EGERGB(0xF5, 0xF5, 0xF5) | |
YELLOW | EGERGB(0xFF, 0xFF, 0x00) | |
YELLOWGREEN | EGERGB(0x9A, 0xCD, 0x32) |
2.EGERGB
功能: 将红、绿、蓝颜色分量合成 RGB 颜色。 声明:
color_t EGERGB( BYTE red, // 红色分量 BYTE green, // 绿色分量 BYTE blue // 蓝色分量 );参数:
red 红色分量,取值范围:0 到 255。
green 绿色分量,取值范围:0 到 255。
blue 蓝色分量,取值范围:0 到 255。
3.EGEGRAY
由灰度值生成对应的 RGB 灰色。
#define EGEGRAY(gray) EGERGB(gray, gray, gray)
这个也非常简单,不多赘述。
4.getbkcolor/setbkcolor
获取/设置背景颜色,返回值是color_t类型。
5.getcolor/setcolor
获取/设置当前绘图颜色。
6.getfillcolor/setfillcolor
获取/设置当前填充颜色。
7.setbkcolor
设置背景色。
8.setbkcolor_f
设置清屏时的背景色。
例如
setbkcolor_f(GREEN);
cleardevice();
后你的屏幕就会变成绿色。
9.setbkmode
功能: 设置输出文字时的背景模式。 声明:
void setbkmode( int bkMode, PIMAGE pimg = NULL );参数: bkMode 指定输出文字时的背景模式,可以是以下值:
值 描述 OPAQUE(默认) 文字输出时带着背景色块。背景色块的颜色可用 setfontbkcolor(), setbkcolor() 设置。 TRANSPARENT 文字输出时无背景色块 pimg 要设置文字背景模式的图像(NULL 为窗口)。
10. ege_setalpha(虽说好像上次讲过)
功能: 为图像中所有像素的颜色设置统一的透明度。 声明:
void ege_setalpha( int alpha, PIMAGE pimg );参数: alpha 透明度,取值范围: 0 到 255,0 为完全透明,255 为不透明。 pimg 要设置的图像( NULL 则改变窗口帧缓存像素颜色的透明度,但窗口显示到屏幕上内容并不会发生颜色变化)。
11.EGEGET_R,EGEGET_G,EGEGET_B,EGEGET_A
获取颜色的R/G/B/A值
#define EGEGET_R(c) ( ((c)>>16) & 0xFF )
#define EGEGET_G(c) ( ((c)>> 8) & 0xFF )
#define EGEGET_B(c) ( ((c)) & 0xFF )
#define EGEGET_A(c) ( ((c)>>24) & 0xFF )
12.颜色模型转换函数
// 颜色模型转换函数
color_t EGEAPI rgb2gray(color_t rgb);
void EGEAPI rgb2hsl(color_t rgb, float *H, float *S, float *L);
void EGEAPI rgb2hsv(color_t rgb, float *H, float *S, float *V);
color_t EGEAPI hsl2rgb(float H, float S, float L);
color_t EGEAPI hsv2rgb(float H, float S, float V);
RGB、HSL、HSV互相转换。
或者你也可以用这个。
// 兼容宏
#define RGBtoGRAY rgb2gray
#define RGBtoHSL rgb2hsl
#define RGBtoHSV rgb2hsv
#define HSLtoRGB hsl2rgb
#define HSVtoRGB hsv2rgb
13.EGEARGB和EGERGBA
#define EGERGBA(r, g, b, a) ( ((r)<<16) | ((g)<<8) | (b) | ((a)<<24) )
#define EGEARGB(a, r, g, b) EGERGBA(r, g, b, a)
和EGERGB相似,只是加上了alpha值(透明度)。
14.EGEACOLOR和EGECOLORA
#define EGEACOLOR(a, color) ( ((color) & 0xFFFFFF) | ((a)<<24) )
#define EGECOLORA(color, a) EGEACOLOR(a, color)
通过透明度和 RGB 颜色合成 ARGB 颜色.
(没什么用)
EGEACOLOR(0xff,0xffff00);
和
EGERGBA(0xff,0xff,0x00,0xff);
是一样的。
15.EGEGRAYA和EGEAGRAY
#define EGEGRAYA(gray, a) EGERGBA(gray, gray, gray, a)
#define EGEAGRAY(a, gray) EGEGRAYA(gray, a)
通过透明度和 RGB 颜色合成 ARGB 颜色。
也是没什么用。
三、RGB,HSL和HSV
什么是HSL,HSV具体可以参照这篇文章。
四、附录
有关于颜色函数的定义:
#define EGERGBA(r, g, b, a) ( ((r)<<16) | ((g)<<8) | (b) | ((a)<<24) )
#define EGERGB(r, g, b) EGERGBA(r, g, b, 0xFF)
#define EGEARGB(a, r, g, b) EGERGBA(r, g, b, a)
#define EGEACOLOR(a, color) ( ((color) & 0xFFFFFF) | ((a)<<24) )
#define EGECOLORA(color, a) EGEACOLOR(a, color)
#define EGEGET_R(c) ( ((c)>>16) & 0xFF )
#define EGEGET_G(c) ( ((c)>> 8) & 0xFF )
#define EGEGET_B(c) ( ((c)) & 0xFF )
#define EGEGET_A(c) ( ((c)>>24) & 0xFF )
#define EGEGRAY(gray) EGERGB(gray, gray, gray)
#define EGEGRAYA(gray, a) EGERGBA(gray, gray, gray, a)
#define EGEAGRAY(a, gray) EGEGRAYA(gray, a)
// 色彩函数
color_t EGEAPI getcolor(PCIMAGE pimg = NULL); // 获取当前绘图前景色
color_t EGEAPI getfillcolor(PCIMAGE pimg = NULL); // 获取当前绘图填充色
color_t EGEAPI getbkcolor(PCIMAGE pimg = NULL); // 获取当前绘图背景色
void EGEAPI setcolor(color_t color, PIMAGE pimg = NULL); // 设置当前绘图前景色
void EGEAPI setfillcolor(color_t color, PIMAGE pimg = NULL); // 设置当前绘图填充色
void EGEAPI setbkcolor(color_t color, PIMAGE pimg = NULL); // 设置当前绘图背景色(设置并做背景色像素替换)
void EGEAPI setbkcolor_f(color_t color, PIMAGE pimg = NULL); // 快速设置当前绘图背景色(只设置不绘画)
void EGEAPI setfontbkcolor(color_t color, PIMAGE pimg = NULL); // 设置当前文字背景色
void EGEAPI setbkmode(int iBkMode, PIMAGE pimg = NULL); // 设置背景混合模式(0=OPAQUE, 1=TRANSPARENT)
// 兼容宏
#define RGBtoGRAY rgb2gray
#define RGBtoHSL rgb2hsl
#define RGBtoHSV rgb2hsv
#define HSLtoRGB hsl2rgb
#define HSVtoRGB hsv2rgb
// 颜色模型转换函数
color_t EGEAPI rgb2gray(color_t rgb);
void EGEAPI rgb2hsl(color_t rgb, float *H, float *S, float *L);
void EGEAPI rgb2hsv(color_t rgb, float *H, float *S, float *V);
color_t EGEAPI hsl2rgb(float H, float S, float L);
color_t EGEAPI hsv2rgb(float H, float S, float V);
// 按 Alpha 通道混合颜色,将 src 作为背景色,dst 作为前景色进行混合
color_t EGEAPI alphablend(color_t dst, color_t src); // 使用 EGEGET_A(src) 作为 Alpha 值
color_t EGEAPI alphablend(color_t dst, color_t src, unsigned char alpha);
五、总结
这次,我们学习了有关颜色的函数,那么我们下次继续!