我写了一段代码测试 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 值。
|_______________________________________________________