Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Magick+中对图像应用alpha遮罩+;_C++_Imagemagick_Png_Magick++ - Fatal编程技术网

C++ 在Magick+中对图像应用alpha遮罩+;

C++ 在Magick+中对图像应用alpha遮罩+;,c++,imagemagick,png,magick++,C++,Imagemagick,Png,Magick++,我有一个图像,有两帧的序列。第二帧应该是第一帧的alpha遮罩 以下是一个例子: 我使用Magick++编写了以下代码,将图像分成两半,并应用alpha遮罩: #include "stdafx.h" #include <iostream> #include <Magick++.h> int main(int argc, char **argv) { Magick::InitializeMagick(*argv); Magick::Image base

我有一个图像,有两帧的序列。第二帧应该是第一帧的alpha遮罩

以下是一个例子:

我使用Magick++编写了以下代码,将图像分成两半,并应用alpha遮罩:

#include "stdafx.h"
#include <iostream>
#include <Magick++.h>

int main(int argc, char **argv)
{
    Magick::InitializeMagick(*argv);

    Magick::Image base, mask;
    std::string image;

    if (argc > 1)
    {
        image = argv[1];
    }
    else
        return EXIT_FAILURE;

    // Read image
    base.read(image);
    mask = base;

    // Crop out mask and sprite
    base.crop(Magick::Geometry(base.columns() / 2, base.rows(), 0, 0));
    mask.crop(Magick::Geometry(mask.columns() / 2, mask.rows(), mask.columns() / 2, 0));

    // Apply mask
    base.composite(mask, 0, 0, Magick::BlendCompositeOp);

    // Write
    base.write("output.png");

    return EXIT_SUCCESS;
}
#包括“stdafx.h”
#包括
#包括
int main(int argc,字符**argv)
{
Magick::InitializeMagick(*argv);
Magick::图像基础、遮罩;
字符串图像;
如果(argc>1)
{
image=argv[1];
}
其他的
返回退出失败;
//读取图像
读取(图像);
掩模=底座;
//裁剪出面具和精灵
裁剪(Magick::Geometry(base.columns()/2,base.rows(),0,0));
grap(Magick::Geometry(mask.columns()/2,mask.rows(),mask.columns()/2,0));
//涂口罩
复合(掩码,0,0,Magick::BlendCompositeOp);
//写
base.write(“output.png”);
返回退出成功;
}
然而,我不知道如何实际应用它作为阿尔法蒙版,而不仅仅是混合它。我也找不到解决方案,至少对于C++没有。
任何帮助都将不胜感激。

您应该禁用两幅图像上的alpha通道,并使用而不是混合。它也看起来像你的面具是倒置的,所以你可能应该否定它。下面是C++中的一个示例:

// Crop out mask and sprite
base.crop(Magick::Geometry(base.columns() / 2, base.rows(), 0, 0));
mask.crop(Magick::Geometry(mask.columns() / 2, mask.rows(), mask.columns() / 2, 0));

// Disable alpha channel
base.matte(false);
mask.matte(false);

// Invert the mask
mask.negate();

// Apply mask
base.composite(mask, 0, 0, Magick::CopyOpacityCompositeOp);

我想你需要
copypacitycompositeop