一码搞懂:EasyX 中显存、COLORREF 如何存储,是否支持透明度?
[編輯] [转简体] (简体译文)概要
正文
我写了一段代码测试 EasyX 的透明度支持
#include <easyx.h> #include <stdio.h> int main() { initgraph(640, 480, EX_SHOWCONSOLE); printf("测试 EasyX 对透明度的支持 2022.9.23 by huidong 【当前 EasyX 版本:%ls】\n", GetEasyXVer()); printf("\n"); printf("绘制步骤\t\t\t显存值\t\t使用 getpixel 得到的 COLORREF 值\n"); printf("\t\t\t\t0xaarrggbb\t0xaabbggrr\n"); printf("--------\t\t\t------\t\t------\n"); DWORD* pBuf = GetImageBuffer(); printf("默认 IMAGE 背景\t\t\t0x%08X\t0x%08X\n", pBuf[0], getpixel(0, 0)); setbkcolor(BLUE); cleardevice(); printf("清空为蓝色背景\t\t\t0x%08X\t0x%08X\n", pBuf[0], getpixel(0, 0)); setbkcolor(0xffaa0000); cleardevice(); printf("清空为不透明蓝色背景\t\t0x%08X\t0x%08X\n", pBuf[0], getpixel(0, 0)); setfillcolor(BLUE); solidrectangle(0, 0, 100, 100); printf("绘制蓝色填充矩形\t\t0x%08X\t0x%08X\n", pBuf[0], getpixel(0, 0)); setfillcolor(0xffaa0000); solidrectangle(0, 0, 100, 100); printf("绘制不透明蓝色填充矩形\t\t0x%08X\t0x%08X(由此可知,使用非零透明度会导致绘制失败)\n", pBuf[0], getpixel(0, 0)); printf("\n"); printf(" _【备注】______________________________________________\n"); printf("| \n"); printf("| 以上数据为 (0, 0) 处的色值\n"); printf("| “蓝色”指宏定义的 BLUE(即 (COLORREF)0x00aa0000,透明度为 0)\n"); printf("| “不透明蓝色”指 (COLORREF)0xffaa0000\n"); printf("|_______________________________________________________\n"); printf("\n"); printf(" _【总结】______________________________________________\n"); printf("| \n"); printf("| EasyX 绘图时不考虑透明度(Alpha)值,颜色宏(如 BLUE,RED)的透明度都是 0(完全透明)。\n"); printf("| 若手动设置透明度为非零值,大部分绘图函数可能绘制失败(cleardevice 除外),且 getpixel 获取到的色值的透明度一定是 0。\n"); printf("|_______________________________________________________\n"); printf("\n"); printf(" _【说明】______________________________________________\n"); printf("| \n"); printf("| 显存中的色值: 0xaarrggbb\n"); printf("| COLORREF 中的色值: 0xaabbggrr(RGB 反转存储)\n"); printf("| 使用 EasyX 函数设置颜色时传入的是 COLORREF 值。\n"); printf("|_______________________________________________________\n"); closegraph(); return 0; }
运行结果:
测试 EasyX 对透明度的支持 2022.9.23 by huidong 【当前 EasyX 版本:20220901】
绘制步骤 显存值 使用 getpixel 得到的 COLORREF 值
0xaarrggbb 0xaabbggrr
-------- ------ ------
默认 IMAGE 背景 0x00000000 0x00000000
清空为蓝色背景 0x000000AA 0x00AA0000
清空为不透明蓝色背景 0xFF0000AA 0x00AA0000
绘制蓝色填充矩形 0x000000AA 0x00AA0000
绘制不透明蓝色填充矩形 0x00000000 0x00000000(由此可知,使用非零透明度会导致绘制失败)
_【备注】______________________________________________
|
| 以上数据为 (0, 0) 处的色值
| “蓝色”指宏定义的 BLUE(即 (COLORREF)0x00aa0000,透明度为 0)
| “不透明蓝色”指 (COLORREF)0xffaa0000
|_______________________________________________________
_【总结】______________________________________________
|
| EasyX 绘图时不考虑透明度(Alpha)值,颜色宏(如 BLUE,RED)的透明度都是 0(完全透明)。
| 若手动设置透明度为非零值,大部分绘图函数可能绘制失败(cleardevice 除外),且 getpixel 获取到的色值的透明度一定是 0。
|_______________________________________________________
_【说明】______________________________________________
|
| 显存中的色值: 0xaarrggbb
| COLORREF 中的色值: 0xaabbggrr(RGB 反转存储)
| 使用 EasyX 函数设置颜色时传入的是 COLORREF 值。
|_______________________________________________________