У меня есть программа, которая берет изображение и записывает его в файл TIFF.Изображение может быть серым (8 бит), серым с альфа-каналом (16 бит), RGB (24 бита) или ARGB (32 бита).У меня нет проблем с записью изображений без альфа-канала, но для изображений с альфа-каналом, когда я пытаюсь установить тег дополнительных образцов, меня отправляют в процедуру обработки ошибок TIFF, установленную TIFFSetErrorHandler.Переданное сообщение - <filename>: Bad value 1 for "ExtraSamples"
в модуле _TIFFVSetField.Пример кода ниже:
#include "tiff.h"
#include "tiffio.h"
#include "xtiffio.h"
//Other includes
class MyTIFFWriter
{
public:
MyTIFFWriter(void);
~MyTIFFWriter(void);
bool writeFile(MyImage* outputImage);
bool openFile(std::string filename);
void closeFile();
private:
TIFF* m_tif;
};
//...
bool MyTIFFWriter::writeFile(MyImage* outputImage)
{
// check that we have data and that the tiff is ready for writing
if (outputImage->getHeight() == 0 || outputImage->getWidth() == 0 || !m_tif)
return false;
TIFFSetField(m_tif, TIFFTAG_IMAGEWIDTH, outputImage->getWidth());
TIFFSetField(m_tif, TIFFTAG_IMAGELENGTH, outputImage->getHeight());
TIFFSetField(m_tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
TIFFSetField(m_tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
if (outputImage->getColourMode() == MyImage::ARGB)
{
TIFFSetField(m_tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);
TIFFSetField(m_tif, TIFFTAG_BITSPERSAMPLE, outputImage->getBitDepth() / 4);
TIFFSetField(m_tif, TIFFTAG_SAMPLESPERPIXEL, 4);
TIFFSetField(m_tif, TIFFTAG_EXTRASAMPLES, EXTRASAMPLE_ASSOCALPHA); //problem exists here
} else if (/*other mode*/)
//apply other mode settings
//...
return (TIFFWriteEncodedStrip(m_tif, 0, outputImage->getImgDataAsCharPtr(),
outputImage->getWidth() * outputImage->getHeight() *
(outputImage->getBitDepth() / 8)) != -1);
}
Насколько я вижу, тег никогда не записывается в файл.К счастью, GIMP по-прежнему признает, что дополнительный канал является альфа-каналом, но некоторые другие программы, которым нужно читать эти TIFF, не настолько щедры.Я пропускаю теги, которые должны быть установлены до TIFFTAG_EXTRASAMPLES?Я скучаю по другим тегам, которые должны быть там?Любая помощь будет оценена.