2 つのフレームのシーケンスを持つ画像があります。2 番目のフレームは、最初のフレームのアルファ マスクになるはずです。
次に例を示します。
http://i.imgur.com/c2M10u7.png
Magick++ を使用して画像を 2 つに分割し、アルファ マスクを適用する次のコードを記述しました。
#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;
}
ただし、これを単にブレンドするのではなく、実際にアルファ マスクとして適用する方法がわかりません。少なくともC ++では、どこにも解決策が見つかりません。
どんな助けでも大歓迎です。