Я пытаюсь написать простую утилиту, которая просматривает список предоставленных файлов изображений, открывает их и проверяет, являются ли изображения 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 );
}
}
}
}
depth
на 8 иtype
на 6? (т.е. параметры, не относящиеся к png) - person Michael   schedule 30.07.2012