2

提供された画像ファイルのリストを実行し、それらを開いて、画像が24ビットまたは32ビットのいずれかであることを確認する単純なユーティリティを作成しようとしています。そうでない場合は、変換されて保存されます。

私はImageMagickとGraphicsMagickの下で少し変更を加えてこれを試しました-以下のコードはGraphicsMagickの下にあります。この質問から保存するためのパラメータを取得しました

ところで、私はGraphics / Image Magickを使用しています。これは、ユーティリティの他の部分でPSDファイルを分割する必要があるためです。私が知る限り、Image / Graphics Magickは、レイヤーを含むPSDファイルを正しく読み書きできる唯一のグラフィックAPIです。(レイヤービットは重要です)

しかし、私は運がないようです。何が間違っている可能性があるかについてのアイデア。これをうまくやっている人はいますか?より適したAPIはありますか?

それぞれの最新のライブラリを構築しています。

乾杯、

マーティン

void
fileProcess( const std::string& pFileName )
{
    Magick::Image img;
    img.read( pFileName );

    if( img.type() != Magick::TrueColorMatteType && 
        img.type() != Magick::TrueColorType )
    {
        Magick::ImageType type = img.type();
        std::cout << "Wrong image type - " << pFileName << "\n";

        img.type(Magick::TrueColorMatteType);
        img.magick( "png" );
        img.defineSet("png:color-type", "6");
        img.defineSet("png:bit-depth", "8");
        img.defineSet("png:format", "png32");
        img.write( pFileName );
    }
}

int 
main(int argc, CHAR* argv[])
{
    Magick::InitializeMagick( *argv );

    std::ifstream fileList( ( "fileList.txt" ) );

    if( !fileList.fail() )
    {
        while( !fileList.eof() )
        {
            std::string imageFileName;
            fileList >> imageFileName;
            if( !imageFileName.empty() )
            {
                fileProcess( imageFileName );
            }
        }
    }
}
4

0 に答える 0