2301_77634747 2024-02-17 19:14 采纳率: 88%
浏览 2
已结题

我这个遮罩为什么中间全黑?

img

img

img


我使用easyx用遮罩来处理图片背景的方法,不知道哪里出问题了,图片背景虽然去掉了,但是本身却被纯黑覆盖了。

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-17 19:15
    关注

    引自免费微信小程序:皆我百晓生

    由于你上传的图片无法直接显示,我将基于你的文字描述进行解答。在EasyX库中处理图像遮罩时出现全黑问题,通常可能有以下原因:

    1. 遮罩图像填充错误: 确保你的遮罩图像(mask)是正确设置的,它应当定义哪些部分需要保留(通常是白色或透明),哪些部分需要去除(黑色)。如果你的遮罩图中心区域是黑色的,那么应用这个遮罩后原图相应位置就会变黑。

    2. 遮罩应用代码逻辑错误: 在使用EasyX库处理图像遮罩时,需要确保正确地将原图和遮罩图结合在一起。这里提供一个简单的示例代码来说明如何应用遮罩(假设srcBitmap是原始位图,maskBitmap是遮罩位图):

    #include "easyx.h"
    
    void applyMask(HBITMAP srcBitmap, HBITMAP maskBitmap)
    {
        int width = GetBitmapWidth(srcBitmap);
        int height = GetBitmapHeight(srcBitmap);
    
        // 创建内存设备上下文并创建临时位图用于存放结果
        HDC hdcMem = CreateCompatibleDC(NULL);
        HBITMAP dstBitmap = CreateCompatibleBitmap(hdcMem, width, height);
        SelectObject(hdcMem, dstBitmap);
    
        // 将源位图和遮罩位图选入内存设备上下文
        HDC srcHdc = CreateCompatibleDC(NULL);
        HDC maskHdc = CreateCompatibleDC(NULL);
        SelectObject(srcHdc, srcBitmap);
        SelectObject(maskHdc, maskBitmap);
    
        // 应用遮罩:逐像素混合,当遮罩像素为白色时保留原像素,否则为黑色
        for (int x = 0; x < width; ++x) {
            for (int y = 0; y < height; ++y) {
                COLORREF srcPixel = GetPixel(srcHdc, x, y);
                COLORREF maskPixel = GetPixel(maskHdc, x, y);
                if (maskPixel == RGB(255, 255, 255)) {  // 白色代表保留
                    SetPixel(hdcMem, x, y, srcPixel);
                } else {  // 非白色(包括黑色)代表去除,这里我们简单地设为黑色
                    SetPixel(hdcMem, x, y, RGB(0, 0, 0));
                }
            }
        }
    
        // 清理资源,并将处理后的位图显示或保存
        DeleteDC(srcHdc);
        DeleteDC(maskHdc);
        DeleteDC(hdcMem);
    
        // 此处省略了将dstBitmap显示或保存的代码
    }
    
    int main()
    {
        initgraph(640, 480);
        
        // 假设已经加载了srcBitmap和maskBitmap
        applyMask(srcBitmap, maskBitmap);
    
        // ...后续操作...
    
        closegraph();
        return 0;
    }
    
    1. 颜色通道理解不准确: 如果遮罩图并非纯黑白二值图,而是灰度图或者带alpha通道的图像,则需根据实际需求调整上述代码中的颜色判断条件。

    请检查你的遮罩图是否符合预期以及应用遮罩的代码逻辑,如果有更具体的代码片段或更详尽的问题描述,我可以帮助进一步分析并给出针对性的建议。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 2月17日

悬赏问题

  • ¥15 Todesk 远程写代码 anaconda jupyter python3
  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置