Попытка преобразовать растровое изображение 24 бит на пиксель в черно-белый TIFF со сжатием CCITT group 4. Результатом является изображение TIFF 1 bpp, как и ожидалось, но без сжатия.
Я использую FreePascal, у которого есть привязки magickwand, и статус никогда не будет MagickFalse:
MagickWandGenesis;
wand := NewMagickWand;
try
status := MagickReadImage(wand,PChar(InputFile));
if (status = MagickFalse) then HandleError;
status := MagickSetImageFormat(wand,'TIFF');
if (status = MagickFalse) then HandleError;
// convert to black & white/lineart
status := MagickSetImageType(wand,BilevelType);
if (status = MagickFalse) then HandleError;
// Group4Compression seems defined as 4 which
// apparently doesn't match imagemagick source. Bug:
//http://mantis.freepascal.org/view.php?id=26723
status := MagickSetImageCompression(wand,CompressionType(7)); //was Group4Compression
if (status = MagickFalse) then HandleError;
// Apparently set(image)compresionquality and
// stripimage are necessary to actually compress
status := MagickSetImageCompressionQuality(wand,0);
if (status = MagickFalse) then HandleError;
status := MagickStripImage(wand);
if (status = MagickFalse) then HandleError;
status := MagickWriteImage(wand,PChar(OutputFile));
if (status = MagickFalse) then HandleError;
finally
wand := DestroyMagickWand(wand);
end;
MagickWandTerminus;
Исходное изображение на http://filehorst.de/d/bmqjzDuB.
Исходный (ошибочный) исходный код программы на http://filehorst.de/d/bluhjivq.
Исходное (ошибочное) выходное изображение на http://filehorst.de/d/bhlbjHgp
Что я делаю неправильно?
Изменить: решено; получил решение за пределами сайта: перечисление CompressionType в привязках FreePascal, вероятно, устарело - Group4Compression было 4 (IIRC), а должно быть 7.
Я дам награду Марку Сетчеллу, поскольку его ответ был необходимой частью решения. Исходный код выше обновлен до правильной версии.