20.透明图片

  • 学习人数 15K+
  • 适合有C语言基础人群学习
avatar
林耿亮

你好编程主讲老师

虽然EasyX图形库支持图片的pnggif格式。但是,不支持pnggif格式的透明特性。这一节中,我们将介绍光栅运算,并使用光栅运算解决EasyX图形库不支持透明图片的问题。

1. 光栅运算

现在有这么一副图片,它的图片内容为熊的剪影。剪影部分为黑色,其余部分为白色。

熊的剪影

若用RGB模式描述颜色,剪影部分的颜色为黑色RGB(0, 0, 0),写成十六进制为0x000000。其余部分为白色RGB(255, 255, 255),写成十六进制为0xFFFFFF

创建一个大小为800 * 600的窗体,设置背景颜色为绿色RGB(164, 225, 202),十六进制为0xA4E1CA,二进制为10100100 11100001 11001010,并用背景颜色刷新整个窗体。

背景

现在,我们把熊剪影的图片绘制到窗体上。但是,我们不是简单的把图片中像素的颜色绘制到窗体上,而是将图片中像素的颜色窗体像素的颜色进行位运算,再将运算结果绘制到对应的窗体像素上。

这里我们对两类像素进行与运算

熊剪影图片中有黑白两种颜色,白色的二进制均为1,绿色背景与它进行与运算,结果仍然为绿色。

绿与白运算

熊剪影图片中的黑色的二进制均为0,绿色背景与它进行与运算,结果为黑色。

绿与黑运算

窗体 运算结果
绿色 0xA4E1CA 白色 0xFFFFFF 绿色 0xA4E1CA
绿色 0xA4E1CA 黑色 0x000000 黑色 0x000000

与运算

通过与运算,我们把熊的剪影绘制到了窗体上,并且保留了剪影周围的绿色背景。

接下来,我们还需要将另一幅图片通过光栅运算后再绘制到窗体上。这是有着黑色背景的熊本体的图片,而之前的黑色剪影,正是这幅图片中熊本体的剪影。

熊黑色背景

我们将这幅图片中像素的颜色窗体像素的颜色进行或运算,再将运算结果绘制到对应的窗体像素上。

由于黑色的二进制全为0,任意颜色黑色或运算,其结果仍然是任意颜色本身。

或运算

这样,我们就将熊本体绘制在了窗体上,并且保留了熊周围的绿色背景。