Графика Magick C++ API PNG Вывод

Я пытаюсь написать простую утилиту, которая просматривает список предоставленных файлов изображений, открывает их и проверяет, являются ли изображения 24-битными или 32-битными. Если это не так, то они преобразуются и сохраняются как таковые.

Я пробовал это с небольшими изменениями в ImageMagick и Graphics Magick - код ниже находится в Graphics Magick. Я взял параметры для сохранения из этого вопроса.

Кстати, я использую Graphics/Image Magick, потому что в других частях моей утилиты мне нужно разделить PSD-файлы, и, насколько я знаю, Image/Graphics Magick — единственные графические API, которые могут правильно читать/записывать PSD-файлы со слоями. (бит слоев важен)

Но, похоже, мне не повезло. Любые идеи, что может быть не так. Кто-нибудь делает это успешно? Есть ли более подходящие 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 );
            }
        }
    }
}

person Martin    schedule 30.07.2012    source источник
comment
Где ваш призыв к img.write ?   -  person Michael    schedule 30.07.2012
comment
Ошибка вырезания и вставки! Я изменил код соответственно.   -  person Martin    schedule 30.07.2012
comment
Неа. Все файлы, вызывающие проблемы, относятся к типу GrayscaleType или BiLevelType, если это помогает. Я пытаюсь заставить все мои файлы в более высоком формате читаться другим API - Marmalade, который в настоящее время не читает изображения в оттенках серого.   -  person Martin    schedule 30.07.2012
comment
Ваши изображения в градациях серого записываются как 8-битные изображения вместо 32-битных? Что, если вы также установите depth на 8 и type на 6? (т.е. параметры, не относящиеся к png)   -  person Michael    schedule 30.07.2012
comment
То же, что и раньше - единственная известная мне настройка типа - это та, что у меня выше, где для типа установлено значение Magick:: TrueColorMatteType, что является 32-битным? Уменьшение кажется нормальным - если я взломаю код, чтобы переписать все изображения как изображения в градациях серого. Просто масштабирование до более высокой битовой глубины, похоже, не работает. Кажется, оптимизируется, так как экономит.   -  person Martin    schedule 31.07.2012