此处给出的代码改自"详解透明贴图和三元光栅操作 - CodeBus"(https://codebus.cn/yangw/transparent-putimage)
在坐标轴方向为默认的(1,1)的情况下,透明图片可以正常输出
但我想通过坐标轴取反来输出水平翻转的图片,如代码中所示的那样,运行程序后却没有看到任何图像数据(坐标轴取反后透明图片无法正常输出)
#include <graphics.h> // EasyX_20190219(beta)
#include <conio.h>
// 引用该库才能使用 AlphaBlend 函数
#pragma comment( lib, "MSIMG32.LIB")
// 半透明贴图函数
// 参数:
// dstimg: 目标 IMAGE 对象指针。NULL 表示默认窗体
// x, y: 目标贴图位置
// srcimg: 源 IMAGE 对象指针。NULL 表示默认窗体
void transparentimage(IMAGE *dstimg, int x, int y, IMAGE *srcimg)
{
HDC dstDC = GetImageHDC(dstimg);
HDC srcDC = GetImageHDC(srcimg);
int w = srcimg->getwidth();
int h = srcimg->getheight();
// 结构体的第三个成员表示额外的透明度,0 表示全透明,255 表示不透明。
BLENDFUNCTION bf = {AC_SRC_OVER, 0, 255, AC_SRC_ALPHA};
// 使用 Windows GDI 函数实现半透明位图
AlphaBlend(dstDC, x, y, w, h, srcDC, 0, 0, w, h, bf);
}
// 主函数
int main()
{
initgraph(600, 400); // 初始化图形窗口
IMAGE src;
loadimage(&src, _T("D:\\src4.png"));
// 透明贴图
transparentimage(NULL, 120, 0, &src);
//水平翻转透明图片
setaspectratio(-1, 1);
transparentimage(NULL, 120, 0, &src);
setaspectratio(1, 1);
// 按任意键退出
_getch();
closegraph();
return 0;
}