簡體   English   中英

如何在Magick ++中為FX功能指定通道?

[英]How do I specify a channel for the FX function in Magick++?

這是描述ImageMagick中使用FX功能的文章: http : //www.imagemagick.org/Usage/transform/#fx

我需要將FX與Magick ++(C ++)一起使用。 如何指定正在使用的頻道? 例如:imagemagick命令行:

convert  -size 64x64 xc:black -channel blue -fx '1/2' fx_navy.gif

如何將其轉換為Magick ++? 我可以做這樣的事情:

Magick::Image img( Magick::Geometry( 64, 64 ), Magick::Color( "black" ) );
img.fx( "1/2" );
img.write( "fx_navy.gif" );

<-但這不僅適用於藍色通道,還適用於所有通道。 實際上它將是灰色或類似的顏色。 如何指定頻道?

還是用Magick ++來做這樣的事情?

convert -size 100x100 xc: +size xc:red xc:yellow xc:lime \
          -fx 'ar=1/max(1,  (i-50)*(i-50)+(j-10)*(j-10)  );
               br=1/max(1,  (i-10)*(i-10)+(j-70)*(j-70)  );
               cr=1/max(1,  (i-90)*(i-90)+(j-90)*(j-90)  );
               ( u[1]*ar + u[2]*br + u[3]*cr )/( ar+br+cr )' \
          gradient_shepards.gif

Magick::Image.fx的第二個參數是通道選擇器。

Magick::Image img( Magick::Geometry( 64, 64 ), Magick::Color( "black" ) );
img.fx( "1/2", Magick::BlueChannel );

對於第二個問題。 您需要利用一些STL方法和技術。

#include <vector>
#include <string>
#include <Magick++.h>



int main(int argc, const char * argv[]) {
    std::vector<Magick::Image> imgList;
    Magick::Image canvas(Magick::Geometry( 100, 100 ), Magick::Color( "NONE" ));
    imgList.push_back(canvas);
    {
        Magick::Image red(Magick::Geometry( 100, 100 ), Magick::Color( "RED" ));
        Magick::Image yellow(Magick::Geometry( 100, 100 ), Magick::Color( "YELLOW" ));
        Magick::Image lime(Magick::Geometry( 100, 100 ), Magick::Color( "LIME" ));

        imgList.push_back(red);
        imgList.push_back(yellow);
        imgList.push_back(lime);
    }
    std::string expression("ar=1/max(1,  (i-50)*(i-50)+(j-10)*(j-10)  );"
                           "br=1/max(1,  (i-10)*(i-10)+(j-70)*(j-70)  );"
                           "cr=1/max(1,  (i-90)*(i-90)+(j-90)*(j-90)  );"
                           "( u[1]*ar + u[2]*br + u[3]*cr )/( ar+br+cr )");
    Magick::fxImages(&canvas, imgList.begin(), imgList.end(), expression);
    canvas.write("/tmp/output.png");
    return 0;
}

output.png

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM