1

背景が赤い画像「objects.png」があり、背景を透明にしようとしています。コードは簡単ですが、どういうわけか、目的の結果を得ることができません。私はこの ImageMagick ビジネスにまったく慣れておらず、これが Magick++ を使用した最初のプログラムです。なので、詳しく教えていただけると助かります。前もって感謝します。コードは次のようになります。

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

    using namespace std;
    using namespace Magick;

    int main(){
        Image my_image("objects.png");
        Color bg_color = my_image.pixelColor(0,0);
        Color new_bg_color(0, MaxRGB, 0, MaxRGB);

        for (int i=0;i<my_image.columns();i++){
            for (int j=0;j<my_image.rows();j++){
                //cout<<"(i,j) : ("<<i<<","<<j<<")\n";
                if (my_image.pixelColor(i,j) == bg_color){
                    my_image.pixelColor(i,j,new_bg_color);
                }
            }
        }
        my_image.write("new_objects.png"); 
    }

画像objects.pngは 入力画像

これを出力として取得しています ここに画像の説明を入力

4

1 に答える 1

1

Magick::Image.transparent透明度の割り当てを処理するメソッドがあると思います。

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

using namespace std;
using namespace Magick;

int main(){
    Image my_image("objects.png");
    Color bg_color = my_image.pixelColor(0,0);
    my_image.transparent(bg_color);
    my_image.write("new_objects.png"); 
}

編集

Magick::Colorの不透明度を尊重できるようにします。Magick::Image.matte、またはMagick::Image.opacity属性を設定して、画像のアルファチャンネルを有効にする必要があります。

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

using namespace std;
using namespace Magick;

int main(){
    Image my_image("objects.png");
    Color bg_color = my_image.pixelColor(0,0);
    Color new_bg_color(0, MaxRGB, 0, MaxRGB);

    my_image.matte(true); // or my_image.opacity();
    for (int i=0;i<my_image.columns();i++){
        for (int j=0;j<my_image.rows();j++){
            if (my_image.pixelColor(i,j) == bg_color){
                my_image.pixelColor(i,j,new_bg_color);
            }
        }
    }
    my_image.write("new_objects.png"); 
}
于 2015-05-15T16:08:36.920 に答える