ПокаЯ могу сохранить некоторые изображения в стеке, но с средством просмотра изображений я могу видеть только 3 или 4 страницы, даже если размер файла для стека изображений намного больше, чем 4 изображения;Я ожидаю увидеть больше изображений.Я последовал примеру здесь .
//open
TIFFOpen(destPtr, "w8");
//set
TIFFSetField(out, TIFFTAG_IMAGEWIDTH, width);
TIFFSetField(out, TIFFTAG_IMAGELENGTH, height);
TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, bitsPerSample);
TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
TIFFSetField(out, TIFFTAG_COMPRESSION, COMPRESSION_NONE); //either one works
TIFFSetField(out, TIFFTAG_FILLORDER, FILLORDER_MSB2LSB);
TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, 8);
TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 1);
TIFFSetField(out, TIFFTAG_MAXSAMPLEVALUE, maxSampleValue);
//loop
for (int i =0; i<=10; i++)
{
// stack
TIFFSetField(out, TIFFTAG_SUBFILETYPE, FILETYPE_PAGE);
// set the page number
TIFFSetField(out, TIFFTAG_PAGENUMBER, i, 10);
int width = 5056;
int height = 2960;
tdata_t l_buffer;
unsigned long l_buffer_size = width * 2;
l_buffer = _TIFFmalloc(l_buffer_size);
unsigned short *da = (unsigned short*)data;
for (int row = 0; row < height; row++)
{
memcpy(l_buffer, &da[row*width], l_buffer_size);
int ret = TIFFWriteScanline(out, l_buffer, row, 0);
if (ret == -1)
{
TIFFClose(out);
}
}
_TIFFfree(l_buffer);
}
//close
(void)TIFFClose(out);
Если я использую TIFFWriteRawStrip (), тогда на изображении есть смещение, и я не могу просмотреть все изображения, дажехотя стек, кажется, содержит все изображения.С обычной библиотекой TIFF этот код работал просто отлично.
//open
TIFFOpen(destPtr, "w8");
//set
TIFFSetField(out, TIFFTAG_IMAGEWIDTH, width);
TIFFSetField(out, TIFFTAG_IMAGELENGTH, height);
TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, bitsPerSample);
TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
TIFFSetField(out, TIFFTAG_COMPRESSION, COMPRESSION_NONE); //either one works
TIFFSetField(out, TIFFTAG_FILLORDER, FILLORDER_MSB2LSB);
TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 1);
TIFFSetField(out, TIFFTAG_MAXSAMPLEVALUE, maxSampleValue);
//loop
for (int i =0; i<=10; i++)
{
// stack
TIFFSetField(out, TIFFTAG_SUBFILETYPE, FILETYPE_PAGE);
// set the page number
TIFFSetField(out, TIFFTAG_PAGENUMBER, i, 10);
TIFFWriteRawStrip((TIFF*)out, (tstrip_t)0, (tdata_t)data, (tsize_t)length);
}
//close
(void)TIFFClose(out);