saihaoxin 2023-09-22 01:49 采纳率: 0%
浏览 91
已结题

easyx中图片背景透明化问题

IMAGE ice[2];
loadimage(ice + 0, "./2_yan.png");
loadimage(ice + 1, "./2_bg.png");
putimage(100, 200, ice + 0, SRCAND);
putimage(100, 200, ice + 1, SRCPAINT);

上述代码意在使图片背景显示透明化,但是出现了个问题,图片背景实现了透明化,但是人物的对应导入的图片显示变成了黑色。按照网上的教程测试了好久也得不到正确答案,想请教一下应该怎么改。

如下两张为导入的图片:

img

img

运行效果图如下:

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-22 10:12
    关注

    【以下回答由 GPT 生成】

    问题的关键在于使用了错误的合并模式(merge mode)。在putimage函数中,使用了SRCAND模式抠取ice[0]的图像,并使用SRCPAINT模式将其与ice[1]的图像合并。然而,这种方式会导致图像中的透明像素变为黑色。

    要解决这个问题,你可以尝试使用另一种合并模式——透明通道合并模式(Transparent Mode)。以下是修改后的代码示例:

    IMAGE ice[2];
    IMAGE temp;
    loadimage(&ice[0], "./2_yan.png");
    loadimage(&ice[1], "./2_bg.png");
    GetImage(&temp, 100, 200, ice[0].getwidth(), ice[0].getheight()); // 获取剪切区域图像
    putimage(100, 200, &ice[1]); // 首先将背景图像绘制到目标画面上,作为底图
    SetWorkingImage(&temp); // 设置工作区为剪切区域图像
    putimage(0, 0, &ice[0], SRCINVERT); // 使用SRCINVERT模式绘制人物图像,使得图像透明像素保持透明
    SetWorkingImage(NULL); // 设置工作区为目标画面
    putimage(100, 200, &temp); // 最后将剪切区域图像绘制回目标画面上
    

    这个修改后的代码会先将背景图像绘制到目标画面上,然后将剪切区域的人物图像以透明通道合并模式绘制回目标画面上。

    请尝试使用这个修改后的代码,看看它是否能够正确地实现透明化效果。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月22日
  • 修改了问题 9月22日
  • 创建了问题 9月22日