对慢羊羊的半透明贴图函数进行改良

对慢羊羊的半透明贴图函数改良了一下,效率*2

(其实是看贴图透明区域大小)

思路是将贴图分三部分

1:完全透明的

2:半透明的

3:完全不透明的

完全透明的直接跳过计算(主要加速在这)

完全不透明的直接拷贝(但还是好慢)

减少赋值而直接将获取RGB值的函数放到阿尔法混合函数中

(有没有效果我不知道,但可读性差了)

先上原地址

https://codeabc.cn/yangw/a/transparent-putimage

这是村长写的代码,明显有很多地方可以优化

// 半透明贴图函数
// 参数:
//		dstimg:目标 IMAGE(NULL 表示默认窗体)
//		x, y:	目标贴图位置
//		srcimg: 源 IMAGE 对象指针
void transparentimage(IMAGE *dsti
...

支持 Alpha 信息图片旋转(旋转后自动适应大小)

由于 EasyX 图形库中的 rotateimage 函数没有考虑关于 alpha 信息的问题,使旋转后的贴图 alpha 信息失真。

为了满足自己的需求,本人手动写 rotateimage 函数,解决了该问题。

本文参考:

  • http://tieba.baidu.com/p/1490993926 (图像任意角度旋转方法)
  • https://codebus.cn/yangw/transparent-putimage (详解透明贴图和三元光栅操作)

要实现图像旋转首先要搞懂旋转的坐标变换。

如图,在平面直角坐标系中,以原点为中心,一个点由一个位置逆时针旋转到另一个点,转角为θ。

根据坐标关系,可以求出两点的坐标关系,推算过程如下:

如图是一个单位圆的 1/4 圆弧,圆心在原点上,点 (x, y) 和 (x1, y1) 在圆弧上,则由三角函数的和差角公式可以推出式子

y = rs

...