у меня есть пирамидальный файл TIFF, и я хочу извлечь плитки без декодирования и перекодирования в формате JPEG, я видел, что с помощью функции TIFFReadRawTile () вы можете извлечь необработанную плитку без декодирования, как я могу записать извлеченный буфер в читаемый файл JPEG?
Задача, которую вы делаете, не является тривиальной. Возможно, вы захотите поближе взглянуть на исходный код утилиты tiff2pdf. Утилита делает то, что вам нужно, и вы можете извлечь из нее соответствующие части.
Проблема в том, что утилита делает много других вещей, от которых вам придется отказаться. Кроме того, утилита не может успешно обработать ни один файл JPEG-in-TIFF. В основном потому, что там достаточно полубитых TIFF.
Я обнаружил, что на самом деле нет способа получить закодированный тайл без непосредственного связывания с таблицами Хаффмана в tiff, что довольно сложно.
Единственный способ, который я нашел, — это прочитать декодированную плитку, а затем сделать магию с помощью vips, чтобы вывести ее непосредственно в jpeg.
tdata_t buf;
tsize_t len;
buf = _TIFFmalloc( TIFFTileSize( tif ) );
len = TIFFReadEncodedTile(tif, tile, buf, (tsize_t) -1);
VImage result ((void *) buf, 256, 256, 3, VImage::FMTUCHAR);
void *outBuffer;
unsigned long len;
vips_jpegsave_buffer(result, &outBuffer, &len, "Q", 90, NULL);
и использовать cout для вывода изображения после некоторых заголовков.