Сохранение стопки изображений в формате TIFF - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь сохранить стопку того же изображения в формате TIFF, но когда я открываю изображение с помощью такого приложения, как ImageJ, я могу просмотреть только первое изображение;2-е и 3-е изображение не может быть отображено.Я полагаю, что изображение TIFF содержит данные изображения для 2-го и 3-го изображений, поскольку размер в 3 раза больше, чем у одного изображения TIFF.

Я использовал следующий код, но мне не повезло.

int NPAGES = 3;
for (int page = 0; page < NPAGES; page++) {
    TIFFSetField(out, TIFFTAG_IMAGEWIDTH, frame->Width);
    TIFFSetField(out, TIFFTAG_IMAGELENGTH, frame->Height);
    TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 1);
    TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 16);
    TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);

    TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
    TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
    TIFFSetField(out, TIFFTAG_MAXSAMPLEVALUE, (1 << frame->BitDepth) - 1);

    /// added 
    TIFFSetField(out, TIFFTAG_SUBFILETYPE, FILETYPE_PAGE);
    TIFFSetField(out, TIFFTAG_PAGENUMBER, page, NPAGES);
    TIFFWriteRawStrip(out, 0, (void*)image, frame->RawImageData->Length * 2);
}

Может кто-нибудь, пожалуйста, помогите мне?

1 Ответ

0 голосов
/ 17 ноября 2018

Функция TIFFWriteDirectory закрывает каталог (страницу) и запускает новый. Вызовите эту функцию в конце цикла, чтобы каждая итерация начиналась с нового каталога. Вам не нужно явно указывать номер страницы.

for (int page = 0; page < NPAGES; page++) {
    TIFFSetField(out, TIFFTAG_IMAGEWIDTH, frame->Width);
    TIFFSetField(out, TIFFTAG_IMAGELENGTH, frame->Height);
    //...
    TIFFWriteDirectory(out);
}
...