DEV-C++ ege.h库 绘图教程(四)

本文介绍了使用DEV-C++的ege.h库进行基本和高级绘图,包括颜色表示方法(十六进制、宏合成、颜色模型转换等),以及设置绘图颜色、背景色和透明度的相关函数。
摘要由CSDN通过智能技术生成

一、绘图及时间函数

没看过前面的最好从第一期开始看。

基本绘图函数:DEV-C++ ege.h库 绘图教程(一)

高级绘图函数(上):DEV-C++ ege.h库 绘图教程(二)

高级绘图函数(下)&时间函数:DEV-C++ ege.h库 绘图教程(三)

二、颜色及其表示函数

1.ege库中颜色表示方法

设置绘图色有以下几种方法:

1.用十六进制颜色码的颜色表示。

(注:以#开头的世界六进制颜色码是通用表达形式,在C++中需要以 0x 开头的十六进制数来代替)

形式为:

颜色类型十六进制颜色码在 ege 对应的十六进制数值
RGB 颜色#RGB0xFFRRGGBB
RGB 颜色#RRGGBB0xFFRRGGBB
ARGB 颜色#AARRGGBB0xAARRGGBB
颜色十六进制数值说明
RGB0xFFRRGGBBRR = 红,GG = 绿,BB = 蓝
ARGB0xAARRGGBBAA = 透明度,RR = 红,GG = 绿,BB = 蓝

如果一些绘图函数使用的是ARGB颜色,则透明度不能为0,否则看不到绘制图形。

2. 用 EGERGB(), EGEARGB() 宏合成颜色。

对应的十六进制形式说明
EGERGB(RR, GG, BB)0xFFRRGGBBRR = 红,GG = 绿,BB = 蓝
EGEARGB(AA, RR, GG, BB)0xAARRGGBBAA = 透明度,RR = 红,GG = 绿,BB = 蓝

3. 用 hsl2rgb、hsv2rgb 转换其他色彩模型到 RGB 颜色。

4. 用预定义颜色,如下:

ege20.08 及之前的版本

常量颜色常量颜色
BLACKEGERGB(0x00, 0x00, 0x00) 黑DARKGRAYEGERGB(0x54, 0x54, 0x54) 深灰
BLUEEGERGB(0x00, 0x00, 0xA8) 蓝LIGHTBLUEEGERGB(0x54, 0x54, 0xFC) 亮蓝
GREENEGERGB(0x00, 0xA8 ,0x00) 绿LIGHTGREENEGERGB(0x54, 0xFC, 0x54) 亮绿
CYANEGERGB(0x00, 0xA8, 0xA8) 青LIGHTCYANEGERGB(0x54, 0xFC, 0xFC) 亮青
REDEGERGB(0xA8, 0x00, 0x00) 红LIGHTREDEGERGB(0xFC, 0x54, 0x54) 亮红
MAGENTAEGERGB(0xA8, 0x00, 0xA8) 紫LIGHTMAGENTAEGERGB(0xFC, 0x54, 0xFC) 亮紫
BROWNEGERGB(0xA8, 0xA8, 0x00) 棕YELLOWEGERGB(0xFC, 0xFC, 0x54) 黄
LIGHTGRAYEGERGB(0xA8, 0xA8, 0xA8) 浅灰WHITEEGERGB(0xFC, 0xFC, 0xFC) 白

ege dev 版本

常量颜色
ALICEBLUEEGERGB(0xF0, 0xF8, 0xFF)
ANTIQUEWHITEEGERGB(0xFA, 0xEB, 0xD7)
AQUAEGERGB(0x00, 0xFF, 0xFF)
AQUAMARINEEGERGB(0x7F, 0xFF, 0xD4)
AZUREEGERGB(0xF0, 0xFF, 0xFF)
BEIGEEGERGB(0xF5, 0xF5, 0xDC)
BEIGEEGERGB(0xF5, 0xF5, 0xDC)
BISQUEEGERGB(0xFF, 0xE4, 0xC4)
BLACKEGERGB(0x00, 0x00, 0x00)
BLANCHEDALMONDEGERGB(0xFF, 0xEB, 0xCD)
BLUEEGERGB(0x00, 0x00, 0xFF)
BLUEVIOLETEGERGB(0x8A, 0x2B, 0xE2)
BROWNEGERGB(0xA5, 0x2A, 0x2A)
BURLYWOODEGERGB(0xDE, 0xB8, 0x87)
CADETBLUEEGERGB(0x5F, 0x9E, 0xA0)
CHARTREUSEEGERGB(0x7F, 0xFF, 0x00)
CHOCOLATEEGERGB(0xD2, 0x69, 0x1E)
CORALEGERGB(0xFF, 0x7F, 0x50)
CORNFLOWERBLUEEGERGB(0x64, 0x95, 0xED)
CORNSILKEGERGB(0xFF, 0xF8, 0xDC)
CRIMSONEGERGB(0xDC, 0x14, 0x3C)
CYANEGERGB(0x00, 0xFF, 0xFF)
DARKBLUEEGERGB(0x00, 0x00, 0x8B)
DARKCYANEGERGB(0x00, 0x8B, 0x8B)
DARKGOLDENRODEGERGB(0xB8, 0x86, 0x0B)
DARKGRAYEGERGB(0xA9, 0xA9, 0xA9)
DARKGREENEGERGB(0x00, 0x64, 0x00)
DARKKHAKIEGERGB(0xBD, 0xB7, 0x6B)
DARKMAGENTAEGERGB(0x8B, 0x00, 0x8B)
DARKOLIVEGREENEGERGB(0x55, 0x6B, 0x2F)
DARKORANGEEGERGB(0xFF, 0x8C, 0x00)
DARKORCHIDEGERGB(0x99, 0x32, 0xCC)
DARKREDEGERGB(0x8B, 0x00, 0x00)
DARKSALMONEGERGB(0xE9, 0x96, 0x7A)
DARKSEAGREENEGERGB(0x8F, 0xBC, 0x8F)
DARKSLATEBLUEEGERGB(0x48, 0x3D, 0x8B)
DARKSLATEGRAYEGERGB(0x2F, 0x4F, 0x4F)
DARKTURQUOISEEGERGB(0x00, 0xCE, 0xD1)
DARKVIOLETEGERGB(0x94, 0x00, 0xD3)
DEEPPINKEGERGB(0xFF, 0x14, 0x93)
DEEPSKYBLUEEGERGB(0x00, 0xBF, 0xFF)
DIMGRAYEGERGB(0x69, 0x69, 0x69)
DODGERBLUEEGERGB(0x1E, 0x90, 0xFF)
FIREBRICKEGERGB(0xB2, 0x22, 0x22)
FLORALWHITEEGERGB(0xFF, 0xFA, 0xF0)
FORESTGREENEGERGB(0x22, 0x8B, 0x22)
FUCHSIAEGERGB(0xFF, 0x00, 0xFF)
GAINSBOROEGERGB(0xDC, 0xDC, 0xDC)
GHOSTWHITEEGERGB(0xF8, 0xF8, 0xFF)
GOLDEGERGB(0xFF, 0xD7, 0x00)
GOLDENRODEGERGB(0xDA, 0xA5, 0x20)
GRAYEGERGB(0x80, 0x80, 0x80)
GREENEGERGB(0x00, 0x80, 0x00)
GREENYELLOWEGERGB(0xAD, 0xFF, 0x2F)
HONEYDEWEGERGB(0xF0, 0xFF, 0xF0)
HOTPINKEGERGB(0xFF, 0x69, 0xB4)
INDIANREDEGERGB(0xCD, 0x5C, 0x5C)
INDIGOEGERGB(0x4B, 0x00, 0x82)
IVORYEGERGB(0xFF, 0xFF, 0xF0)
KHAKIEGERGB(0xF0, 0xE6, 0x8C)
LAVENDEREGERGB(0xE6, 0xE6, 0xFA)
LAVENDERBLUSHEGERGB(0xFF, 0xF0, 0xF5)
LAWNGREENEGERGB(0x7C, 0xFC, 0x00)
LEMONCHIFFONEGERGB(0xFF, 0xFA, 0xCD)
LIGHTBLUEEGERGB(0xAD, 0xD8, 0xE6)
LIGHTCORALEGERGB(0xF0, 0x80, 0x80)
LIGHTCYANEGERGB(0xE0, 0xFF, 0xFF)
LIGHTGOLDENRODYELLOWEGERGB(0xFA, 0xFA, 0xD2)
LIGHTGRAYEGERGB(0xD3, 0xD3, 0xD3)
LIGHTGREENEGERGB(0x90, 0xEE, 0x90)
LIGHTPINKEGERGB(0xFF, 0xB6, 0xC1)
LIGHTSALMONEGERGB(0xFF, 0xA0, 0x7A)
LIGHTSEAGREENEGERGB(0x20, 0xB2, 0xAA)
LIGHTSKYBLUEEGERGB(0x87, 0xCE, 0xFA)
LIGHTSLATEGRAYEGERGB(0x77, 0x88, 0x99)
LIGHTSTEELBLUEEGERGB(0xB0, 0xC4, 0xDE)
LIGHTYELLOWEGERGB(0xFF, 0xFF, 0xE0)
LIGHTREDEGERGB(0xFC, 0x54, 0x54)
LIGHTMAGENTAEGERGB(0xFC, 0x54, 0xFC)
LIMEEGERGB(0x00, 0xFF, 0x00)
LIMEGREENEGERGB(0x32, 0xCD, 0x32)
LINENEGERGB(0xFA, 0xF0, 0xE6)
MAGENTAEGERGB(0xFF, 0x00, 0xFF)
MAROONEGERGB(0x80, 0x00, 0x00)
MEDIUMAQUAMARINEEGERGB(0x66, 0xCD, 0xAA)
MEDIUMBLUEEGERGB(0x00, 0x00, 0xCD)
MEDIUMORCHIDEGERGB(0xBA, 0x55, 0xD3)
MEDIUMPURPLEEGERGB(0x93, 0x70, 0xDB)
MEDIUMSEAGREENEGERGB(0x3C, 0xB3, 0x71)
MEDIUMSLATEBLUEEGERGB(0x7B, 0x68, 0xEE)
MEDIUMSPRINGGREENEGERGB(0x00, 0xFA, 0x9A)
MEDIUMTURQUOISEEGERGB(0x48, 0xD1, 0xCC)
MEDIUMVIOLETREDEGERGB(0xC7, 0x15, 0x85)
MIDNIGHTBLUEEGERGB(0x19, 0x19, 0x70)
MINTCREAMEGERGB(0xF5, 0xFF, 0xFA)
MISTYROSEEGERGB(0xFF, 0xE4, 0xE1)
MOCCASINEGERGB(0xFF, 0xE4, 0xB5)
NAVAJOWHITEEGERGB(0xFF, 0xDE, 0xAD)
NAVYEGERGB(0x00, 0x00, 0x80)
OLDLACEEGERGB(0xFD, 0xF5, 0xE6)
OLIVEEGERGB(0x80, 0x80, 0x00)
OLIVEDRABEGERGB(0x6B, 0x8E, 0x23)
ORANGEEGERGB(0xFF, 0xA5, 0x00)
ORANGEREDEGERGB(0xFF, 0x45, 0x00)
ORCHIDEGERGB(0xDA, 0x70, 0xD6)
PALEGOLDENRODEGERGB(0xEE, 0xE8, 0xAA)
PALEGREENEGERGB(0x98, 0xFB, 0x98)
PALETURQUOISEEGERGB(0xAF, 0xEE, 0xEE)
PALEVIOLETREDEGERGB(0xDB, 0x70, 0x93)
PAPAYAWHIPEGERGB(0xFF, 0xEF, 0xD5)
PEACHPUFFEGERGB(0xFF, 0xDA, 0xB9)
PERUEGERGB(0xCD, 0x85, 0x3F)
PINKEGERGB(0xFF, 0xC0, 0xCB)
PLUMEGERGB(0xDD, 0xA0, 0xDD)
POWDERBLUEEGERGB(0xB0, 0xE0, 0xE6)
PURPLEEGERGB(0x80, 0x00, 0x80)
REDEGERGB(0xFF, 0x00, 0x00)
ROSYBROWNEGERGB(0xBC, 0x8F, 0x8F)
ROYALBLUEEGERGB(0x41, 0x69, 0xE1)
SADDLEBROWNEGERGB(0x8B, 0x45, 0x13)
SALMONEGERGB(0xFA, 0x80, 0x72)
SANDYBROWNEGERGB(0xF4, 0xA4, 0x60)
SEAGREENEGERGB(0x2E, 0x8B, 0x57)
SEASHELLEGERGB(0xFF, 0xF5, 0xEE)
SIENNAEGERGB(0xA0, 0x52, 0x2D)
SILVEREGERGB(0xC0, 0xC0, 0xC0)
SKYBLUEEGERGB(0x87, 0xCE, 0xEB)
SLATEBLUEEGERGB(0x6A, 0x5A, 0xCD)
SLATEGRAYEGERGB(0x70, 0x80, 0x90)
SNOWEGERGB(0xFF, 0xFA, 0xFA)
SPRINGGREENEGERGB(0x00, 0xFF, 0x7F)
STEELBLUEEGERGB(0x46, 0x82, 0xB4)
TANEGERGB(0xD2, 0xB4, 0x8C)
TEALEGERGB(0x00, 0x80, 0x80)
THISTLEEGERGB(0xD8, 0xBF, 0xD8)
TOMATOEGERGB(0xFF, 0x63, 0x47)
TURQUOISEEGERGB(0x40, 0xE0, 0xD0)
VIOLETEGERGB(0xEE, 0x82, 0xEE)
WHEATEGERGB(0xF5, 0xDE, 0xB3)
WHITEEGERGB(0xFF, 0xFF, 0xFF)
WHITESMOKEEGERGB(0xF5, 0xF5, 0xF5)
YELLOWEGERGB(0xFF, 0xFF, 0x00)
YELLOWGREENEGERGB(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具体可以参照这篇文章。

关于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);

五、总结

这次,我们学习了有关颜色的函数,那么我们下次继续!

上期:DEV-C++ ege.h库 绘图教程(三)

下期:DEV-C++ ege.h库 绘图教程(五)

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值