如何实现透明图片的镜像翻转 | 您所在的位置:网站首页 › 图像镜面翻转的原理 › 如何实现透明图片的镜像翻转 |
此处给出的代码改自"详解透明贴图和三元光栅操作 - CodeBus"(https://codebus.cn/yangw/transparent-putimage) 在坐标轴方向为默认的(1,1)的情况下,透明图片可以正常输出 但我想通过坐标轴取反来输出水平翻转的图片,如代码中所示的那样,运行程序后却没有看到任何图像数据(坐标轴取反后透明图片无法正常输出) #include // EasyX_20190219(beta) #include // 引用该库才能使用 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; } |
CopyRight 2018-2019 实验室设备网 版权所有 |